Networking 如何在单个主机名后面隐藏Docker容器

Networking 如何在单个主机名后面隐藏Docker容器,networking,dns,docker,hostname,fqdn,Networking,Dns,Docker,Hostname,Fqdn,我是Docker的新手。我从虚拟机思维开始,但我意识到它使用了与虚拟机完全不同的范式,甚至与传统的LXC容器 最大的挑战是理解网络是如何工作的。我正在尝试使用Docker在需要相同端口的机器上运行多个服务,以避免端口冲突 我希望使用主机的FQDN访问所有这些文件,而不必担心将容器FQDN添加到DNS。我正在将相关容器端口转发到未使用的主机端口 问题是,当我尝试从浏览器访问服务时,它被重定向到容器的FQDN,而它无法解析该FQDN。结果是“未找到服务器”错误 有没有一种方法可以隐藏主机FQDN后面

我是Docker的新手。我从虚拟机思维开始,但我意识到它使用了与虚拟机完全不同的范式,甚至与传统的LXC容器

最大的挑战是理解网络是如何工作的。我正在尝试使用Docker在需要相同端口的机器上运行多个服务,以避免端口冲突

我希望使用主机的FQDN访问所有这些文件,而不必担心将容器FQDN添加到DNS。我正在将相关容器端口转发到未使用的主机端口

问题是,当我尝试从浏览器访问服务时,它被重定向到容器的FQDN,而它无法解析该FQDN。结果是“未找到服务器”错误


有没有一种方法可以隐藏主机FQDN后面的所有容器,而不必解析容器的FQDN

您可以让每个docker容器使用不同的外部端口,然后让服务器docker使用类似nginx或apache的东西来反向代理请求。我必须构建这样的东西,在一个主机名上接收所有内容,然后将所有通信传递到适当的容器和端口


难点在于docker容器在每次创建时都有新地址。您可以在它们启动时动态计算它们的地址,并让代理容器最后以这些地址启动。获取这些地址的方法是使用“docker inspect”并获取所需的数据,或者使用docker py之类的库获取相关数据。

您考虑过吗?我尝试过在主机(CentOS 7)上运行Apache反向代理。也许我配置错了,但它不起作用。它仍然重定向到容器主机名。我的理解是,“ProxyPassReverse http://:”应该防止在浏览器中显示重定向,但我在那里看到了容器的地址。此外,似乎没有办法为容器提供一个静态地址,这使得配置代理变得很困难。似乎应该有一种更优雅的方法来管理它,除了每次都必须计算IP之外。我考虑将环回IP绑定到容器上暴露的端口。然后Apache或Nginx可以将请求转发到此地址。一定有一种方法可以做到这一点。看来答案是肯定的。我希望能用传统的网络方法找到一个简单的解决方案。但是看起来我需要做很多阅读:)。如果您试图从其他容器访问您的容器,那么链接是正确的答案--link memcached1:mc会将名为memcached1的容器链接到正在启动的docker容器中的主机名“mc”。