2017-07-23 81 views
0

我已经在Docker容器中设置了一个Web服务,它只响应对http://pouac.localhost所做的HTTP请求。将主机指向具有静态域名的Docker容器

因此,当我想测试这个Docker容器时,我必须手动将该容器的IP地址添加到主机的/etc/hosts文件中。从一个运行此IP地址更改到另一个,所以我需要每次都用得到它:

docker inspect mycontainer 

...然后将其添加到/etc/hosts

它有效,但它是一个真正的痛苦。我很确定有一个更好的方法来做到这一点。

如果我理解正确,Docker includes a DNS server。所以我想我可以尝试将主机指向Docker DNS,这将是一个开始......但我不知道在哪个地址运行Docker DNS。

有关信息,主机运行的是Ubuntu 16.04,而Docker容器以docker-compose启动。

+0

所讨论[这里]你也分配静态IP地址到容器(https://stackoverflow.com/questions/39493490/provide-static -ip-to-docker-containers-via-docker-compose) – Ayushya

回答

1

首先谈到,在/ etc/hosts文件末尾添加以下行:

127.0.0.1 pouac.localhost 

其次,暴露你的容器的TCP端口80。 对于这个做,加上类似的东西在你的搬运工,compose.yml文件:

ports: 
    - "80:80" 

然后,TCP端口80将暴露于您的主机的每个IP地址,所以它会接触到TCP 127.0.0.1上的端口80,因此连接到http://pouac.localhost将连接到您的容器。

+0

简单但高效。 –

1

听起来像是码头集装箱对端口80上的请求作出响应。因此,您希望将码头集装箱上的端口映射到端口80上,使用docker-compose.yml中相应服务的ports部分像在this question

+0

端口映射不是问题。我能够从主机端口到达容器。我想要做的是从特定的*域名*到达容器。 –

+1

标准的方法是运行映射到本地主机上的端口80的反向代理(例如nginx)。然后代理使用虚拟主机将请求转发给容器。这样容器可以使用映射的主机名相互交谈。当你直接开始使用IP地址时,它变得难以管理。 – Grimmy

0

可以尝试--add-host标志,同时运行搬运工容器 例如

docker run --add-host=google.com:8.8.8.8 -td <image_name> 

主机映射将被附加到所述容器的在/ etc /主机。

例如

docker run --rm \ 
--hostname mycontainer \ 
--add-host docker.com:127.0.0.1 \ 
--add-host test:10.10.10.2 \ 
alpine:latest \ 
cat /etc/hosts 

输出

172.17.0.45 mycontainer 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
10.10.10.2 test 
127.0.0.1 docker.com 
+0

除非我误解你的答案,这不是我真正需要的。我需要从主机访问容器,而不是相反。 –

相关问题