TL; DR 是否有一种简单的方法可以将docker主机地址分配给docker-compose容器中的主机名?
我正在使用selenium hub进行测试,在Docker容器中运行。在我的开发机器上,我可以在http://localhost:8080
看到我的Web应用程序,但在selenium hub的上下文中,localhost
不可用。我想做的是编写我的测试,以便我可以使用http://dockerhost:8080/
之类的URL来测试应用程序。
皱纹是这个代码的开发发生在多台机器上,其中一些机器在不同的网络上,在不同的位置,等等。所以我想这样做的方式不涉及修改每个可能运行它的主机的docker-compose.yml
文件。
我的应用程序中有一个单独的docker-compose.yml文件中的selenium hub和浏览器图像,它看起来像这样:
hub:
image: selenium/hub
ports:
- 4444:4444
extra_hosts:
dockerhost: 1.2.3.4
firefox:
image: selenium/node-firefox
links:
- hub
extra_hosts:
dockerhost: 1.2.3.4
chrome:
image: selenium/node-chrome
links:
- hub
extra_hosts:
dockerhost: 1.2.3.4
这样可行,但需要使用每个主机上的IP地址更新docker-compose.yml
文件。鉴于docker-compose.yml
文件已提交到项目的git
存储库,这是不可接受的。
我想做的是将那些硬编码的IP地址替换为某些内容(环境变量?某些特殊docker-compose
值?),当docker-compose up
为1.2.3.4
时,它将使用正确的IP地址执行。我在这里看到了许多不同的问题,提出了类似的问题,但并不完全相同,我尝试了很多不同的方法。
我尝试用环境变量DOCKER_HOST替换# in the docker-compose.yml file
extra_hosts:
dockerhost: $DOCKER_HOST
# run docker-compose up on the command line
DOCKER_HOST=1.2.3.4 docker-compose up
,然后像这样运行它:
docker-compose.yml
它有效。但是在启动容器时还有一件事需要记住 - 我已经把它留了一次。我还尝试使用bash命令替换extra_hosts:
dockerhost: $(ip -4 addr show eth0 | grep -Po 'inet \K[\d.]+')
文件中的环境变量,以提取IP地址,如下所示:
{{1}}
但这也许并不令人惊讶,不起作用。
还有其他想法吗?