Docker 访问主机上的端口 运行
Docker access port running on host
我正在使用 boot2docker 并且 运行 是一个 docker 容器。我希望 docker 容器能够与具有开放端口的主机通信。我试过打主机盒,但它通过 virtualbox,所以这里似乎需要两级桥接才能让端口通话。不确定该怎么做,或者即使它可能。
其实你是对的,有2个级别:
主机 <-> boot2docker 虚拟机 <-> docker 容器
因此,如果您在 运行 您的容器中打开一个端口,则可以从 boot2docker 虚拟机而不是主机访问该端口,除非您进行端口转发。
这里有两个解决方案:
使用 boot2docker VM 的 ip 访问,而不是 localhost
运行 boot2docker ip
你会看到一个ip地址,比如192.168.59.103
,然后你就可以通过192.168.59.103:port
访问你的服务了
进行端口转发
打开你的 VirtualBox 应用程序,select 虚拟机即 boot2docker-vm
,转到 Settings
->Network
->Advanced
->Port Forwarding
。然后你可以添加你自己的端口转发,例如,我想通过 localhost:10022
访问我的 ssh 端口,只需添加一个新列 host port 10022 和来宾端口 22。
您可以查看 this doc 了解更多信息。
如果你想从容器访问主机端口,这里有一个简单的方法,只需将你的主机 ip 暴露给 docker 容器的 host
,比如 docker run --add-host vmhost:192.168.59.3 <docker_image> <command>
,注意 [=22] =] 是默认的 virtualbox host only adapter IP。然后你就可以访问vmhost
了。
此外,您可以管理自己的网桥来执行此操作,pipework 可能会对您有所帮助。
我正在使用 boot2docker 并且 运行 是一个 docker 容器。我希望 docker 容器能够与具有开放端口的主机通信。我试过打主机盒,但它通过 virtualbox,所以这里似乎需要两级桥接才能让端口通话。不确定该怎么做,或者即使它可能。
其实你是对的,有2个级别:
主机 <-> boot2docker 虚拟机 <-> docker 容器
因此,如果您在 运行 您的容器中打开一个端口,则可以从 boot2docker 虚拟机而不是主机访问该端口,除非您进行端口转发。
这里有两个解决方案:
使用 boot2docker VM 的 ip 访问,而不是
localhost
运行boot2docker ip
你会看到一个ip地址,比如192.168.59.103
,然后你就可以通过192.168.59.103:port
访问你的服务了
进行端口转发 打开你的 VirtualBox 应用程序,select 虚拟机即
boot2docker-vm
,转到Settings
->Network
->Advanced
->Port Forwarding
。然后你可以添加你自己的端口转发,例如,我想通过localhost:10022
访问我的 ssh 端口,只需添加一个新列 host port 10022 和来宾端口 22。 您可以查看 this doc 了解更多信息。
如果你想从容器访问主机端口,这里有一个简单的方法,只需将你的主机 ip 暴露给 docker 容器的 host
,比如 docker run --add-host vmhost:192.168.59.3 <docker_image> <command>
,注意 [=22] =] 是默认的 virtualbox host only adapter IP。然后你就可以访问vmhost
了。
此外,您可以管理自己的网桥来执行此操作,pipework 可能会对您有所帮助。