2017-12-29 68 views
0

docker-compose.yaml과 함께 jwilder/nginx-proxy을 사용하고 있습니다. 그것은 다음과 같습니다Jwilder nginx 프록시 - 도커 작성 후 503 구조 업데이트

proxy: 
    image: jwilder/nginx-proxy 
    restart: always 
    volumes: 
    - /var/run/docker.sock:/tmp/docker.sock:ro 
    - ./nginx/conf.d/proxy.conf:/etc/nginx/conf.d/proxy.conf:ro 
    - /Users/marcin/Docker/local_share/certificates:/etc/nginx/certs:ro  
    ports: 
    - "80:80" 
    - "443:443" 
    container_name: proxy 

나는 꽤 오랜 시간을 사용하고 있는데 내 프로젝트 docker-compose.yaml은 다음과 같습니다 때 잘 작동 것 :

web: 
    build: /Users/marcin/Docker/definitions/php-nginx/php-7.1-ubuntu 
    volumes: 
    - /Users/marcin/Docker/projects/test.local/html/:/usr/share/nginx/html/ 
    - /Users/marcin/Docker/projects/test.local/nginx/conf.d/:/etc/nginx/conf.d/ 
    - /Users/marcin/Docker/projects/test.local/nginx/log/:/var/log/nginx/ 
    - /Users/marcin/Docker/projects/test.local/supervisor/conf.d/:/etc/supervisor/conf.d/ 
    - /Users/marcin/Docker/projects/test.local/supervisor/log/:/var/log/supervisor/ 
    - /Users/marcin/Docker/projects/test.local/cron/:/root/.cron/ 
    - /Users/marcin/Docker/local_share/:/root/.local_share/ 
    - /Users/marcin/Docker/local_share/certificates/:/usr/share/nginx/certificates/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
    - db 
    container_name: test.php 
    hostname: test.local 
    ports: 
    - "336:22" 
    - "8081:80" 
    - "18080:443"  
    environment: 
    - VIRTUAL_HOST=test.local 
    - CERT_NAME=default 
    - HTTPS_METHOD=noredirect 
db: 
    build: /Users/marcin/Docker/definitions/mysql/5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=pass 
    - MYSQL_DATABASE= 
    - MYSQL_USER= 
    - MYSQL_PASSWORD= 
    expose: 
    - 3306 
    volumes: 
    - /Users/marcin/Docker/projects/test.local/mysql/data/:/var/lib/mysql/ 
    - /Users/marcin/Docker/projects/test.local/mysql/conf.d/:/etc/mysql/conf.d/source 
    - /Users/marcin/Docker/projects/test.local/mysql/log/:/var/log/mysql/ 
    ports: 
    - "33060:3306" 
    container_name: test.db 
    hostname: test.local 

나는 http://test.local를 사용하여 아무 문제없이 사이트에 액세스 할 수 있습니다 또는 https://test.local.

version: "3.2" 
services: 
    web: 
    build: /Users/marcin/Docker/definitions/php-nginx/php-7.1-ubuntu 
    volumes: 
     - /Users/marcin/Docker/projects/test.local/html/:/usr/share/nginx/html/ 
     - /Users/marcin/Docker/projects/test.local/nginx/conf.d/:/etc/nginx/conf.d/ 
     - /Users/marcin/Docker/projects/test.local/nginx/log/:/var/log/nginx/ 
     - /Users/marcin/Docker/projects/test.local/supervisor/conf.d/:/etc/supervisor/conf.d/ 
     - /Users/marcin/Docker/projects/test.local/supervisor/log/:/var/log/supervisor/ 
     - /Users/marcin/Docker/projects/test.local/cron/:/root/.cron/ 
     - /Users/marcin/Docker/local_share/:/root/.local_share/ 
     - /Users/marcin/Docker/local_share/certificates/:/usr/share/nginx/certificates/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
     - db 
    container_name: test.php 
    hostname: test.local 
    ports: 
     - "336:22" 
     - "8081:80" 
     - "18080:443"  
    environment: 
     - VIRTUAL_HOST=test.local 
     - CERT_NAME=default 
     - HTTPS_METHOD=noredirect 
    db: 
    build: /Users/marcin/Docker/definitions/mysql/5.7 
    environment: 
     - MYSQL_ROOT_PASSWORD=pass 
     - MYSQL_DATABASE= 
     - MYSQL_USER= 
     - MYSQL_PASSWORD= 
    expose: 
     - 3306 
    volumes: 
     - /Users/marcin/Docker/projects/test.local/mysql/data/:/var/lib/mysql/ 
     - /Users/marcin/Docker/projects/test.local/mysql/conf.d/:/etc/mysql/conf.d/source 
     - /Users/marcin/Docker/projects/test.local/mysql/log/:/var/log/mysql/ 
    ports: 
     - "33060:3306" 
    container_name: test.db 
    hostname: test.local 

을하고 그 후에는 작동하지 않을 것 같다

그러나 나는 새로운 버전으로 내 파일 구조를 업데이트했다. 문제없이 ip 및 port를 사용하여 사이트에 액세스 할 수 있지만 더 이상 도메인을 사용하여 액세스 할 수 없습니다. 내가 받고 있어요하려고 할 때 :

503 서비스를 일시적으로 사용할 수 없습니다

의 nginx/1.13.8

을 그리고이 jwilder의 nginx에서 확실히 (그리고하지의 nginx 프로젝트).

그래서 문제는 - 작동시키기 위해 환경 변수를 어디에 넣어야합니까? 그들이 현재와 같이 배치 될 때 그들은 프록시에 의해 읽히지 않는 것처럼 보입니다.

답변

1

503은 nginx-proxy 컨테이너가 docker에서 실행중인 컨테이너를 볼 수 있으며 nginx가 트래픽을 라우팅하기 위해 필요한 구성을 가지고 있지만 docker 네트워크를 통해 해당 컨테이너에 연결할 수 없음을 나타냅니다. 컨테이너 대 컨테이너 네트워킹이 작동하려면 공통된 도커 네트워크가 정의되어 있어야합니다. 먼저 네트워크를 만들려면 다음을 실행해야합니다

docker network create proxy 

그런 다음 네트워크를 (이 또한 적어도 V2 구문으로 업그레이드해야합니다 사용하도록 nginx를 프록시 작성 파일을 업데이트을, 나는 3.2 갔어요

version: "3.2" 

networks: 
    proxy: 
    external: true 

services: 
    proxy: 
    image: jwilder/nginx-proxy 
    restart: always 
    volumes: 
     - /var/run/docker.sock:/tmp/docker.sock:ro 
     - ./nginx/conf.d/proxy.conf:/etc/nginx/conf.d/proxy.conf:ro 
     - /Users/marcin/Docker/local_share/certificates:/etc/nginx/certs:ro  
    ports: 
     - "80:80" 
     - "443:443" 
    container_name: proxy 
    networks: 
     - proxy 

을 그리고 응용 프로그램에 대한 비슷한 일을 수행합니다 :) 다른 파일과 일치하는

version: "3.2" 
networks: 
    proxy: 
    external: true 
services: 
    web: 
    build: /Users/marcin/Docker/definitions/php-nginx/php-7.1-ubuntu 
    volumes: 
     - /Users/marcin/Docker/projects/test.local/html/:/usr/share/nginx/html/ 
     - /Users/marcin/Docker/projects/test.local/nginx/conf.d/:/etc/nginx/conf.d/ 
     - /Users/marcin/Docker/projects/test.local/nginx/log/:/var/log/nginx/ 
     - /Users/marcin/Docker/projects/test.local/supervisor/conf.d/:/etc/supervisor/conf.d/ 
     - /Users/marcin/Docker/projects/test.local/supervisor/log/:/var/log/supervisor/ 
     - /Users/marcin/Docker/projects/test.local/cron/:/root/.cron/ 
     - /Users/marcin/Docker/local_share/:/root/.local_share/ 
     - /Users/marcin/Docker/local_share/certificates/:/usr/share/nginx/certificates/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
     - db 
    container_name: test.php 
    hostname: test.local 
    ports: 
     - "336:22" 
     - "8081:80" 
     - "18080:443"  
    environment: 
     - VIRTUAL_HOST=test.local 
     - CERT_NAME=default 
     - HTTPS_METHOD=noredirect 
    networks: 
     - proxy 
     - default 
    db: 
    build: /Users/marcin/Docker/definitions/mysql/5.7 
    environment: 
     - MYSQL_ROOT_PASSWORD=pass 
     - MYSQL_DATABASE= 
     - MYSQL_USER= 
     - MYSQL_PASSWORD= 
    expose: 
     - 3306 
    volumes: 
     - /Users/marcin/Docker/projects/test.local/mysql/data/:/var/lib/mysql/ 
     - /Users/marcin/Docker/projects/test.local/mysql/conf.d/:/etc/mysql/conf.d/source 
     - /Users/marcin/Docker/projects/test.local/mysql/log/:/var/log/mysql/ 
    ports: 
     - "33060:3306" 
    container_name: test.db 
    hostname: test.local 

당신이 V1 구문에서 업그레이드 된 경우 (버전 데프없이를 inode) docker는 dns가없는 동일한 네트워크에서 모든 것을 실행하지 않고 dns가있는 전용 네트워크에서 각 작성 프로젝트 또는 스택을 실행하는 것으로 바뀝니다. 다른 네트워크에서 앱을 실행하려면 명시 적으로 구성해야합니다. 위의 예에서 웹 컨테이너 만 프록시 네트워크에 배치되었으며 두 프로젝트 모두이 프로젝트 또는 스택 용으로 생성 된 기본 네트워크에 있습니다.

+0

감사합니다. 이것은 잠시 후에 답변을 찾았지만 답변이 정확하고 다른 사람들에게 도움이 될 수 있습니다. –