mac 下 如果docker 配置问题 无法启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mac 下 如果docker 配置问题 无法启动相关的知识,希望对你有一定的参考价值。

参考技术A 在增加 私有仓库的时候 配置有问题 导致无法启动docker
在用户目录调整即可

或者直接查找文件

Docker - 无法从 Mac 主机访问容器

【中文标题】Docker - 无法从 Mac 主机访问容器【英文标题】:Docker - cannot access container from Mac Host 【发布时间】:2014-05-21 16:52:45 【问题描述】:

我似乎无法访问在我的 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

<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>

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:8080 并将其转发到端口 80 上的容器,对吧?

【问题讨论】:

【参考方案1】:

您需要将端口从 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 上进行测试,您可能需要选择不同的端口。

【讨论】:

啊!我不知道我以前是怎么错过的! 8080 示例用于我当前的案例,但我肯定会想在未来改变它。谢谢!【参考方案2】:

对于那些正在运行 Docker 1.8 或更新版本的人来说,Andy 和 Muneeb 的 cmets 的语法不再有效(理论相同),因为 boot2docker 已被弃用并被 docker-machine 和 docker VM 取代名称已更改 [1]。

转发单端口 Mac -> VM -> 容器

如果您只想使用默认网络选项将容器内的端口 80 转发到 Mac 上的端口 8080,请执行以下操作:

a) 使用 Dockerfile 中的 EXPOSE 80docker run 中的 --expose=80 公开端口 80。为 UDP 端口添加 /udp

b) 使用-p 8080:80docker run 中将端口从容器映射到VM。为 UDP 端口添加 /udp

c) 告诉 docker VM(现在称为“默认”)在 VM 上的端口 8080 和 Mac 上的端口 8080 之间添加 NAT 映射: VBoxManage controlvm default natpf1 'port8080,tcp,,8080,,8080'。第一个端口在您的 Mac 上;第二个端口在虚拟机上。 要删除规则,请使用VBoxManage controlvm default natpf1 delete port8080。注意:VBoxManage controlvm 更改正在运行的 VM,modifyvm 更改已停止的 VM。

获取 docker 虚拟机的 IP 地址

新语法为docker-machine ip default(默认为 docker VM 的名称)。

[1]https://docs.docker.com/installation/mac/

【讨论】:

【参考方案3】:

您正尝试在 Mac OS X 的 localhost (127.0.0.1) 上查看它。docker 在 Virtualbox VM 中运行。试试:

boot2docker ip

这将为您提供虚拟机的 IP 地址,然后您可以使用 ip_address:port 连接到 docker,例如 192.168.59.103:8080(如果 192.168.59.103 是分配给 Virtualbox 虚拟机的 IP)

【讨论】:

【参考方案4】:

我刚刚写了一篇关于如何使用仅主机网络和 TCP 路由的教程,以使这变得非常简单。这样您就不必映射每个特定端口。

http://ispyker.blogspot.com/2014/04/accessing-docker-container-private.html

【讨论】:

以上是关于mac 下 如果docker 配置问题 无法启动的主要内容,如果未能解决你的问题,请参考以下文章

Mac 使用docker搭建PHP环境

记录MAC中改Idea配置导致无法启动

docker 配置lnmp环境(mac环境下)

mac下在eclipse配置lombok插件,配置插件后eclipse无法启动

mac book air 无法同时开启两个虚拟机

Docker安装启动过程