有没有办法使用docker-compose将Docker主机添加到容器的/ etc / hosts?

时间:2016-12-12 15:18:15

标签: docker docker-compose

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 up1.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}}

但这也许并不令人惊讶,不起作用。

还有其他想法吗?

0 个答案:

没有答案