我想爲我的碼頭集裝箱設置一個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