将Apache直接安装在主机上后,我在"C:\Windows\System32\drivers\etc\hosts"
中添加了一个内部主机名,并使用虚拟主机轻松访问本地的不同项目,例如:http://foo.test
和http://bar.test
。
为每个项目使用docker容器,我可以通过在docker-compose
文件中分配主机端口来访问该项目。
我希望docker可以有一些内部工具来通过主机名访问容器。
使用反向代理可以是这些相对较旧但出色的文章中描述的解决方案。
但是,因为我认为这是一个非常常见的开发要求,所以我希望Docker内置一些解决方案。
答案 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和本地主机文件之间没有耦合。