Docker 버전 19.03.5, 빌드 633a0ea838
Linux xxx 5.0.0-37-일반 #40~18.04.1-Ubuntu SMP 2019년 11월 14일 목요일 12:06:39 UTC x86_64 x86_64 x86_64 GNU/Linux
동일한 시스템에 있는 여러 WordPress 인스턴스에 대해 Docker를 사용하여 Nginx 프록시를 설정하기 위해 이 가이드를 따르려고 합니다.pattonwebz 여러 WordPress 컨테이너 nginx-proxy 컨테이너에서 생성된 Dockerfile은 다음과 같습니다.
version: '2'
services:
nginx:
image: jwilder/nginx-proxy:alpine
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- /etc/nginx/conf.d
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- ./certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
- ENABLE_IPV6=true
dockergen:
image: jwilder/docker-gen
container_name: dockergen
command: -notify-sighup nginx -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
volumes_from:
- nginx
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
nginx-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
environment:
#ACME_CA_URI:https://acme-staging.api.letsencrypt.org/directory
- NGINX_DOCKER_GEN_CONTAINER=dockergen
container_name: nginx-letsencrypt
volumes_from:
- nginx
volumes:
- ./certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
default:
external:
name: nginx-proxy
네트워크 nginx-proxy를 만들었지만 깨끗한 환경(볼륨 및 컨테이너가 지워짐)에서 이 명령을 실행하면 다음 오류가 발생합니다.
whoami_1 | Listening on :8000
nginx | WARNING: /etc/nginx/dhparam/dhparam.pem was not found. A pre-generated dhparam.pem will be used for now while a new one
nginx | is being generated in the background. Once the new dhparam.pem is in place, nginx will be reloaded.
nginx | Generating DH parameters, 2048 bit long safe prime, generator 2
nginx | forego | starting dockergen.1 on port 5000
nginx | forego | starting nginx.1 on port 5100
nginx | dockergen.1 | 2020/01/12 17:57:26 Generated '/etc/nginx/conf.d/default.conf' from 4 containers
nginx | dockergen.1 | 2020/01/12 17:57:26 Running 'nginx -s reload'
dockergen | 2020/01/12 17:57:26 Generated '/etc/nginx/conf.d/default.conf' from 4 containers
dockergen | 2020/01/12 17:57:26 Sending container 'nginx' signal '1'
dockergen | 2020/01/12 17:57:26 Watching docker events
dockergen | 2020/01/12 17:57:26 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification ''
nginx | dockergen | 2020/01/12 17:57:26 Received event die for container f34a91bce20f
nginx exited with code 2
dockergen | 2020/01/12 17:57:26 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification ''
nginx-letsencrypt | Info: Custom Diffie-Hellman group found, generation skipped.
nginx-letsencrypt | Reloading nginx docker-gen (using separate container dockergen)...
dockergen | 2020/01/12 17:57:27 Received signal: hangup
dockergen | 2020/01/12 17:57:27 Received signal: hangup
nginx-letsencrypt | Reloading nginx (using separate container f34a91bce20f421d03ef0e1a8190e55d0f592d4c2ef30920bcebaa527db4d60f)...
nginx-letsencrypt | {"message":"Cannot kill container: f34a91bce20f421d03ef0e1a8190e55d0f592d4c2ef30920bcebaa527db4d60f: Container f34a91bce20f421d03ef0e1a8190e55d0f592d4c2ef30920bcebaa527db4d60f is not running"}
dockergen | 2020/01/12 17:57:27 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification ''
nginx-letsencrypt | 2020/01/12 17:57:27 Generated '/app/letsencrypt_service_data' from 3 containers
nginx-letsencrypt | 2020/01/12 17:57:27 Running '/app/signal_le_service'
nginx-letsencrypt | 2020/01/12 17:57:27 Watching docker events
nginx-letsencrypt | 2020/01/12 17:57:27 Contents of /app/letsencrypt_service_data did not change. Skipping notification '/app/signal_le_service'
nginx-letsencrypt | 2020/01/12 17:57:27 Error: nginx-proxy container f34a91bce20f421d03ef0e1a8190e55d0f592d4c2ef30920bcebaa527db4d60f isn't running.
nginx-letsencrypt | Sleep for 3600s
따라서 nginx가 코드 2로 종료되면 nginx가 중단되고 문제가 무엇인지 알 수 없다는 메시지가 나타납니다. 또한 nginx 컨테이너의 라인을 비활성화하려고 시도했습니다.
- /var/run/docker.sock:/tmp/docker.sock:ro
하지만 행운은 없습니다.
답변1
이것이 유일한 문제는 아닐 수도 있지만 설정이 잘못되었습니다. jwilder/nginx-proxy
nginx 및 dockergen 스크립트가 포함된 파일을 사용할 수 있습니다 . 자신만의 고정된 nginx 이미지(공식 nginx 이미지에서 구축)를 사용한 다음 이를 jwilder/dockergen
구성 파일을 생성하는 동반자로 사용하려고 합니다. 하지만 이 두 이미지는 사용하지 마세요.
jwilder/nginx-proxy
이는 처리 문서에 잘 설명되어 있습니다.개별 컨테이너 설정.
로그를 자세히 살펴보면 nginx
컨테이너가 dockergen을 시작한 다음 컨테이너 내에서 동일한 작업을 시도하는 것을 볼 수 있습니다 dockergen
. 이것은 아마도 좋은 생각이 아닐 것입니다 ...
구성을 어느 쪽이든(단일 컨테이너 또는 이중 컨테이너) 수정하기로 결정한 다음 다시 시도하여 문제가 지속되는지 확인하는 것이 좋습니다. 저는 지난 3년 동안 프로덕션 환경에서 별도의 컨테이너 설정을 실행하고 최소한 매달 업데이트해 왔습니다.