无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机相关的知识,希望对你有一定的参考价值。

语境

我计划通过在本地引入虚拟主机来简化多个docker-compose.yml的开发设置。我环顾四周,决定将nginx-proxy用于反向代理(可以为每个服务设置VIRTUAL_HOST)。

配置

[将它们暴露在主机上,我经过了dnsmasq的路径,并在/etc/resolver/test/上添加了nameserver 127.0.0.1

我使用dev/docker-compose.yml文件执行了上述操作:

version: '3.5'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: 'always'
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock:ro"

  dnsmasq:
    image: andyshinn/dnsmasq
    restart: 'always'
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    cap_add:
      - NET_ADMIN
    command: --log-facility=-
    volumes:
      - ./data/dnsmasq.conf:/etc/dnsmasq.conf
      - ./data/dnsmasq.d:/etc/dnsmasq.d

networks:
  default:
    external:
      name: proxynet

data/dnsmasq.conf文件仅包含address=/test/127.0.0.1

我还创建了一个外部网络proxynet,并将其用作docker-compose文件(docker network create proxynet)的默认网络。然后,这允许其他docker-compose文件和服务链接到代理。

我有以下proj1/docker-compose.yml

version: "3.5"

services:
  proj1-web:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=proj1-web.test

networks:
  default:
    external:
      name: proxynet

同时运行这两个docker-compose文件(即docker-compose up),我可以从本地计算机访问proj1-web.test。一切正常。

现在,我希望能够在另一个容器中引用proj1-web.test并将其解析为正在运行的容器。

我将创建proj2/docker-compose.yml(类似于以前的不同名称):

version: "3.5"

services:
  proj2-web:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=proj2-web.test

networks:
  default:
    external:
      name: proxynet

在一切正常运行的同时,我可以从本地计算机访问proj1-web.testproj2-web.test。我可以在proj1proj2之间使用docker-compose run proj1-web sh -c "apk update -qq; apk add curl -qq; curl -v proj2-web:8000"成功卷曲不同的服务。

问题是我无法从proj2-web.testproj1:]中卷曲虚拟主机的名称docker-compose run proj1-web sh -c "apk update -qq; apk add curl -qq; curl -v proj2-web.test"。>

* Rebuilt URL to: proj2-web.test/ * Trying 127.0.0.1... * TCP_NODELAY set * connect to 127.0.0.1 port 80 failed: Connection refused * Failed to connect to proj2-web.test port 80: Connection refused * Closing connection 0 curl: (7) Failed to connect to proj2-web.test port 80: Connection refused

我在这里缺少什么吗?看来各个容器都无法访问从dnsmasq向我的本地计算机提供的DNS,我无法弄清楚如何授予它们访问权限。也许我走错路了-我愿意接受建议。 

上下文,我计划通过在本地引入虚拟主机来简化多个docker-compose.yml的某些开发设置。我环顾四周,决定将nginx-proxy用于反向代理(...

答案
我最终创建了一个解决我的问题的解决方案。您可以在此处找到该工具的存储库:

以上是关于无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?

dnsmasq多物理网口dhcp配置

如何更改 docker jwilder/nginx-proxy 上传限制?

在 nginx/nginx-proxy 容器中使用 Nextcloud 以及其他服务

Docker使用nginx-proxy对Nextcloud进行https反向代理

dnsmasq 动态加载/etc/hosts