Dav*_*lch 4 php mysql lamp docker
我似乎无法访问我的Mac上本地运行的简单Docker容器.我可以curl localhost从容器中运行并看到默认的Apache页面已经提供,但我无法从我的机器的浏览器中点击它.
我想知道我是否有VirtualBox配置问题.有没有帮助诊断问题?
# Build the image of ubuntu 12.04 LTS
from ubuntu:precise
# Run apt-get update
run apt-get -y update
# Install LAMP
run DEBIAN_FRONTEND=noninteractive apt-get -y install lamp-server^
run apt-get -y install vim-tiny curl wget
# Put custom scripts in the container and give proper permissions to them
add ./startup.sh /usr/local/bin/startup.sh
run chmod 755 /usr/local/bin/startup.sh
add site.vhost /etc/apache2/sites-available/site
run a2ensite site
# Expose port 80 to the host machine
expose 80
Run Code Online (Sandbox Code Playgroud)
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
#Order allow,deny allow from all
</Directory>
# Possible values include: debug, info, notice, warn, error, crit, # alert, emerg.
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
a2dissite default
apache2ctl graceful
/usr/bin/mysqld_safe &
Run Code Online (Sandbox Code Playgroud)
我将构建图像docker build -t test1 .- 似乎运行正常.
在初始设置时,我运行docker run -d -v $(pwd)/mysql:/tmp/mysql test1 /bin/bash -c "cp -rp /var/lib/mysql/* /tmp/mysql"设置MySQL.
然后我跑去docker run -i -t -v $(pwd)/mysql:/var/lib/mysql -v $(pwd)/www:/var/www -p 8080:80 test1 /bin/bash开始实际的实例.
一旦到达终端,我就跑了service apache2 start,一切似乎运行得很好.如果我跑,curl localhost我得到默认页面就好了.
一切看起来都很棒,它只是从主机上击中它不起作用.我应该能够导航到http://127.0.0.1:808080端口的容器,对吧?
您需要将端口从VM转发到主机.来自docker的默认"随机"范围的示例是:(来自http://docs.docker.io/en/latest/installation/mac/#forwarding-vm-port-range-to-host)
# vm must be powered off
for i in {49000..49900}; do
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i";
VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i";
done
Run Code Online (Sandbox Code Playgroud)
但是如果你想特意转发8080:
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8080,tcp,,8080,,8080"
Run Code Online (Sandbox Code Playgroud)
如果您还使用8080在Mac上测试内容,则可能需要选择其他端口.
小智 7
对于那些正在运行Docker 1.8或更新版本的线程的人来说,Andy和Muneeb的注释中的语法不再起作用(理论是一样的),因为boot2docker已被弃用并被docker-machine取代并且docker VM名称已更改[ 1].
转发单个端口Mac - > VM - >容器
如果您只想使用Mac上端口8080的默认网络选项将端口80转发到容器内,请执行以下操作:
a)使用EXPOSE 80Dockerfile中的a或者--expose=80在端口80中显示端口80 docker run.添加/udpUDP端口.
b)使用-p 8080:80in 将端口从容器映射到VM docker run.添加/udpUDP端口.
c)告诉docker VM(现在称为"default")在VM上的端口8080和Mac上的端口8080之间添加NAT映射:
VBoxManage controlvm default natpf1 'port8080,tcp,,8080,,8080'.第一个端口在你的Mac上; 第二个端口在VM上.删除规则使用VBoxManage controlvm default natpf1 delete port8080.注意:VBoxManage controlvm更改正在运行的VM,modifyvm更改已停止的VM.
获取docker VM的IP地址
新语法是docker-machine ip default(默认为docker VM的名称).
[1] https://docs.docker.com/installation/mac/
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |