主机名到Docker容器的映射?

时间:2020-05-27 02:36:24

标签: windows docker networking dns containers

将Apache直接安装在主机上后,我在"C:\Windows\System32\drivers\etc\hosts"中添加了一个内部主机名,并使用虚拟主机轻松访问本地的不同项目,例如:http://foo.testhttp://bar.test

为每个项目使用docker容器,我可以通过在docker-compose文件中分配主机端口来访问该项目。

我希望docker可以有一些内部工具来通过主机名访问容器。

使用反向代理可以是这些相对较旧但出色的文章中描述的解决方案。

但是,因为我认为这是一个非常常见的开发要求,所以我希望Docker内置一些解决方案。

1 个答案:

答案 0 :(得分:0)

我对这个问题的处理方法如下。考虑我有一个都在运行Web服务器的容器A和B。我只是在本地计算机上添加了一个反向代理,它查看主机名,然后代理到相应的容器。

但我不是通过硬编码的IP地址进行代理,而是通过本地端口进行代理。因此,不要将两个容器都绑定到端口80,而是将它们绑定到随机的本地端口(例如4041)并通过该端口进行代理。这样,您就可以将容器IP与主机分离。

然后我的nginx文件如下:

server {
    server_name example.com # Add <host lan ip> example.com to your /etc/hosts file

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;   # These two lines ensure that the
        proxy_set_header Connection "Upgrade";    # a WebSocket is used
        proxy_pass http://localhost:4041/;
    }

<snip>

添加多个容器仅意味着您必须编辑1个Nginx代理文件,并将端口绑定到本地计算机。 Docker ip和本地主机文件之间没有耦合。