使用Docker Compose到达主机
我有一个Docker Compose v2文件,它启动了一个容器。我在端口3001上本地运行服务。我想从Docker容器访问此服务 Docker Compose文件如下所示:使用Docker Compose到达主机,docker,docker-compose,Docker,Docker Compose,我有一个Docker Compose v2文件,它启动了一个容器。我在端口3001上本地运行服务。我想从Docker容器访问此服务 Docker Compose文件如下所示: version: '2' services: my-thingy: image: my-image:latest #network_mode: host #DOES not help environment: - THE_HOST_I_WANT_TO_CONNECT_TO=http:
version: '2'
services:
my-thingy:
image: my-image:latest
#network_mode: host #DOES not help
environment:
- THE_HOST_I_WANT_TO_CONNECT_TO=http://127.0.0.1:3001
ports:
- "3010:3010"
my-thingy:
image: my-image:latest
environment:
- THE_HOST_I_WANT_TO_CONNECT_TO=${LOCAL_XX_HOST}
现在,我如何才能到达我想要连接的主机
我尝试的是:
- 将网络模式设置为主机。这不起作用。无法访问127.0.0.1
- 我还可以看到,如果我使用主机的本地IP,我可以从容器到达主机。一个快速的破解方法是使用类似于
的东西来获取IP并替换Docker Compose中的IP。由于此IP可以在重新连接时更改,并且不同的设置可以有不同的ifconfig | grep broadcast | awk{print$2}'
结果,因此我正在寻找更好的解决方案ifconfig
- 这是Docker Compose的一个已知问题:请参阅。未实施
/etc/hosts
中dockerhost
条目的建议解决方案
我选择了使用shell变量的解决方案,正如在关于该问题的中所建议的:
创建一个LOCAL_XX_HOST
变量:export LOCAL_XX_HOST=“http://$(ifconfig en0 inet | grep“inet”| awk-F'[:]+'{print$2}'):3001”
然后,例如,在docker compose
中引用此变量,如下所示:
version: '2'
services:
my-thingy:
image: my-image:latest
#network_mode: host #DOES not help
environment:
- THE_HOST_I_WANT_TO_CONNECT_TO=http://127.0.0.1:3001
ports:
- "3010:3010"
my-thingy:
image: my-image:latest
environment:
- THE_HOST_I_WANT_TO_CONNECT_TO=${LOCAL_XX_HOST}
我已经使用了另一个来自评论的hack/workarkound。似乎对我有用™ 暂时。。。具体而言,我在Dockerfile中添加了以下几行: 这样,我就可以使用dockerhost作为安装Docker的主机名。如上所述,这是基于:
-
(…)一种方法是依赖这样一个事实:Docker主机可以通过Docker桥的地址访问,而Docker桥恰好是容器的默认网关。换句话说,在这种情况下,您可能只需要对
进行巧妙的解析。当然,它依赖于实现细节(默认网关恰好是Docker主机的IP地址),将来可能会更改。(……)ip路由ls | grep^default
-
(…)很多像我们这样的人都在寻找这样的小新闻
netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'
(…)
--路线-r
显示内核路由表。
(…)
--数字,-n
显示数字地址,而不是试图确定符号主机、端口或用户名