我想为我的码头集装箱设置一个nginx proxy,以使用简单的子域而不是端口。我喜欢用docker-compose来启动我的容器,而且由于我对码头工人一般都很陌生,所以我开始马上使用v2格式。Docker nginx代理与docker-compose v1一起工作,但不是v2?
我花了一段时间弄清楚为什么这个非常流行,看似简单的使用nginx代理容器不适合我。事实证明,这与我使用docker-compose v2有关。
我会后我用第一泊坞窗,compose.yml文件,这并没有出于某种原因:
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
container_name: nginx-proxy
network_mode: bridge
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- ENABLE_IPV6=true
- DEFAULT_HOST=domain.com
whoami:
image: jwilder/whoami
network_mode: bridge
environment:
- VIRTUAL_HOST=whoami.local
这就是例子詹金斯容器来测试它:
version: "2"
services:
jenkins:
image: jenkins:2.46.2-alpine
restart: always
hostname: jenkins.domain.com
network_mode: bridge
expose:
- 8080
- 50000
ports:
- 8080:8080
- 50000:50000
volumes:
- /srv/jenkins:/var/jenkins_home
environment:
- VIRTUAL_HOST=jenkins.domain.com
- VIRTUAL_PORT=8080
现在,我将发布配置实际上做工作开箱对我来说:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
container_name: nginx-proxy
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- ENABLE_IPV6=true
- DEFAULT_HOST=domain.com
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
而对于詹金斯容器:
jenkins:
image: jenkins:2.46.2-alpine
restart: always
hostname: jenkins.domain.com
expose:
- 8080
- 50000
ports:
- 8080:8080
- 50000:50000
volumes:
- /srv/jenkins:/var/jenkins_home
environment:
- VIRTUAL_HOST=jenkins.domain.com
- VIRTUAL_PORT=8080
唯一的区别我看到的是去除network_mode: bridge
。我补充说,当我注意到v2有单独的网络被创建,但是v1(或简单的docker run
),他们最终在同一个网络上。使用network_mode: bridge
似乎解决了这个问题。
除此之外,这只是docker-compose.yml
文件的结构更改,但必须存在一些其他差异才能阻止此设置的运行。
由于V1已弃用,我想使用v2格式...我需要更改哪些内容才能使docker-compose v2的行为如同v1并让代理正常工作?
是什么错误你看到了吗? – BMitch
实际上没有错误。代理只是不工作,不会将请求转发给其他容器。 – noone