docker-compose legacy yml에서 서비스를 링크하면 링크 된 컨테이너의 포트를 발견하는 데 사용할 수있는 환경 변수 servicename_PORT를 생성하는 데 사용됩니다. 새로운 v2 형식에서는 서비스 이름을 내부 DNS에 추가하는 사용자 정의 네트워크가 있으므로 연결된 서비스에 연결할 수 있지만 연결된 서비스가 노출하는 포트는 어떻게 찾을 수 있습니까? 내가 생각할 수있는 유일한 방법은 포트를 넣을 수있는 링크 된 서비스 각각에 대한 환경 변수를 만드는 것입니다.하지만 서비스 자체의 노출 섹션에서 한 번, 그리고 한 번만 같은 포트를 도커 작성에 두 번 사용할 것입니다. 연결하는 서비스의 환경 변수로 사용합니다. 노출 된 포트를 발견하는 DRY 방법이 더 있습니까?Docker로 연결된 서비스의 노출 된 포트를 찾는 방법 v2 형식을 작성 하시겠습니까?
0
A
답변
0
이 들어, 일반적으로 https://www.consul.io/registrator 기본적으로
처럼, 이것이 의미하는이 registrator + 서비스 검색 서비스를 이용,이 API를 추가/ip) 다음 무작위 수 있습니다 심지어 DNS를 사용하여 영사에 포함되어 있습니다. 후자는 포트 사용에 도움이되지 않습니다.
이 모범 사례를 피하고 싶다면. 도커 소켓을 장착하고 docker inspect <servicename>
을 사용하여 포트를 찾으십시오.
services:
other:
container_name: foo
image: YYYY
theonedoingthelookup:
image: ZZZZ
volumes:
- /var/run/docker.sock:/var/run/docker.sock
당신은 컨테이너에 설치된 고정 표시기의 CLI 도구가 필요합니다, 당신은 필요한 정보를 추출하기 위해 ZZZZ 컨테이너 내부에
docker inspect YYYY
사용하는 일부 그렙/AWK는/필터이 실행
0
서비스가 컨테이너에서와 같이 실행되는 포트입니다. 포트 매핑은 컨테이너 < -> 컨테이너 통신에는 적용되지 않으며 호스트 호스트는 < -> 컨테이너 통신에만 적용됩니다. 예를 들어
:
version: '2'
services:
a:
...
networks:
- my-net
b:
...
networks:
- my-net
networks:
my-net:
이의이
a
포트
8080
에서 웹 서버를 실행한다고 가정 해 봅시다,
b
는
a:8080
에 요청을 전송하여 칠 수있을 것입니다. 당신이 (포트 당신이 서비스되어 정의에 대한 KV 저장소를 볼 하나에 대한
문제는 b가 어떤 포트가 서비스를 실행하고 있는지 알 수 없다는 것입니다. 레거시 구성 링크를 사용하면 포트가 name_PORT 환경 변수에 노출되었습니다. 이제는 'b'가 노출 된 포트를 알 수있는 서비스 이름 (예 : 'a')을 찾지 못할 수 있습니다. –
'a'에서 어떤 서비스를 운영하고 있습니까? 포트가 정적이지 않습니까? – johnharris85
A는 모든 서비스가 될 수 있습니다. 'b'는 단지 프록시 일 뿐이므로 일반화해야합니다. @ EugenMayer의 대답은 소켓을 사용하여 나를위한 트릭을 수행합니다. –