2016-12-02 5 views
0

일부 도커 컨테이너로 좋은 Træfɪk 리버스 프록시를 사용하고 있습니다.간단한 Træfɪk 리버스 프록시 설치

가 여기 내 Træfɪk 고정 표시기 - compose.yml입니다 : 여기

version: '2' 
services: 
    traefik: 
    image: traefik 
    command: --web --docker --docker.domain=my-domain.net --logLevel=DEBUG 
    ports: 
     - "80:80" 
     - "8080:8080" 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - /dev/null:/traefik.toml 

내 서비스 '고정 표시기 - compose.yml 웹 부분이다 :이 모든 물건을 시작

version: '2' 
services: 
    # [...] 
    web: 
    build: . # An nginx based image 
    container_name: my_app_web 
    volumes: 
     - ..:/app/ 
    depends_on: 
     - db 
     - redis 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

, 프론트 엔드/백엔드가 Træfɪk 웹 UI에서 생성되었지만 my-domain.net으로 내 응용 프로그램에 액세스 할 수 없습니다.

$ curl -H Host:my-domain.net http://127.0.0.1 
# ... after ±30s. 
Gateway Timeout 

는 로그인 Træfɪk :

오류 전달 http://172.18.0.4:80에 오류 : 전화 접속 TCP 172.18.0.4:80 : I/O 제한 시간은 로컬 IP를의에서 나는 응용 프로그램에 액세스 할 수

그래도 (172.18.0.4) 괜찮습니다.

나는 여기 뭔가를 잊어 버리겠습니까?


추가 정보 :

  • 공식 emilevauge/whoami은 별도의 고정 표시기-작성 파일에서 잘 작동한다.
  • 내 서비스는 백엔드로 고정 표시기와 traefik를 실행하면
+0

웹 응용 프로그램의 Dockerfile과 docker-compose.yml의 전체 스 니펫을 제공해 주시겠습니까? –

+0

하나 이상의 네트워크에서 일부 컨테이너를 실행하고 있습니까? 네트워크 traefik이 컨테이너를 찾을 레이블을 추가해야합니다. 그렇지 않으면 일부 게이트웨이 시간 초과가 표시됩니다. 전체 작성 파일을 제공해주십시오. –

답변

0

를 들어, 나는 용기를 검사하고 서로 다른 네트워크 나에게 Traefik 내 서비스를 보여 주었다.

기본적으로 도커는 항상 브리지 모드를 사용한다고 생각했지만 더 이상 compose networking에서 v2로 시작하지 않습니다. 그것은 도커 - 작성 파일 (프로젝트 이름에 기반)을위한 네트워크를 만들고 있습니다.

따라서 v2를 시작하는 작성 작업을하려면 통신해야 할 두 가지 도커 작성 파일로 공통 네트워크를 지정해야합니다. 그래서

나는 고정 표시기-작성 V1 파일을 정의했기 때문에 Traefik가 emilevauge/whoami와 함께 잘 작동했다

:

version: '2' 
services: 
    # ... 
    web: 
    # ... 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

networks: 
    default: 
    external: 
     name: traefik_default 

추가 정보 : 여기

, 나는 단순히 traefik에 대해 생성 된 하나를 사용 그것은 브리지 모드를 사용하고있었습니다.

1

(포트 (80)를 매핑하여) Træfɪk없이 잘 작동되고, 당신의 web 컨테이너에서 포트를 노출 할 필요가 없다. 따라서 작성 파일의 web 서비스에서 ports 섹션을 제거하는 것이 안전해야합니다.

동일한 작성 파일에서 두 서비스를 모두 실행하고 있습니까? traefik 컨테이너가 웹 컨테이너에 액세스 할 수 있는지 확인해야합니다. 이 작업은 동일한 작성 파일에서 두 개의 컨테이너를 실행하거나 두 컨테이너를 동일한 네트워크에 연결하여 작동합니다.

시간 초과에 대한 또 다른 가능성은 웹 컨테이너가 두 개 이상의 포트를 표시하는 것입니다 (Docker 파일을 살펴보십시오). 이 경우, traefik에게 요청을 매핑해야하는 포트를 명시 적으로 알릴 필요가 있습니다. 귀하의 경우에는 "traefik.port=80"이어야합니다.

매우 기본적인 설정을 실행 중이며 이미 레이블을 사용하여 도메인을 설정 했으므로 몇 가지 특별한 구성을 제공 할 필요가 없습니다. very basic docs 같은 toml 파일로 /dev/null을 마운트하여 기본값을 확인하십시오.traefik 서비스에 대한

:

volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /dev/null:/traefik.toml 

@ AndreasJägle에 의해 제안으로 웹 서비스

labels: 
    - "traefik.backend=my_app" 
    - "traefik.frontend.rule=Host:my-domain.net" 
    - "traefik.port=80" 
+0

자세한 답변을 부탁드립니다. 실제로 필자는 서비스에 대한 포트 매핑을 정의 할 필요가 없음을 발견했습니다. 또한 실제로 컨테이너가 추가 포트를 노출하고 있으며 'traefik.port'로 올바른 포트를 지정했습니다. 질문이 업데이트되었습니다. 그러나 나는 여전히 시간 제한 및 로그 (내 진입로) 내 서비스로 들어오는 –

+0

나는 공식 emilevauge/whoami 작은 이미지를 별도의 고정 장치 - 작성 파일에 시도했지만 정상적으로 작동하고있다. Traefik 없이는 내 이미지가 제대로 작동합니다. 디버깅하는 방법을 모르겠습니다. –

+1

당신은 작성 파일이있는 폴더처럼'docker network ls'와'docker network inspect '의 출력을 제공 할 수 있습니까? (예를 들어 mytest_default라는 네트워크의 경우 폴더가 my -테스트). 나는 컨테이너가 서로 도달 할 수 없다고 생각한다. –