当前位置:  开发笔记 > 编程语言 > 正文

Docker - 无法从Mac Host访问容器

如何解决《Docker-无法从MacHost访问容器》经验,为你挑选了2个好方法。

我似乎无法访问我的Mac上本地运行的简单Docker容器.我可以curl localhost从容器中运行并看到默认的Apache页面已经提供,但我无法从我的机器的浏览器中点击它.

我想知道我是否有VirtualBox配置问题.有没有帮助诊断问题?

Dockerfile
# 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
site.vhost


    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        #Order allow,deny allow from all
    

    # 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

startup.sh
#!/bin/bash

a2dissite default
apache2ctl graceful
/usr/bin/mysqld_safe &

开始...

我将构建图像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端口的容器,对吧?



1> Andy..:

您需要将端口从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

但是如果你想特意转发8080:

VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8080,tcp,,8080,,8080"

如果您还使用8080在Mac上测试内容,则可能需要选择其他端口.



2> 小智..:

对于那些正在运行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/

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有