docker-compose.yml
두 개의 다른 폴더에 두 개의 별도 파일이 있습니다.
~/front/docker-compose.yml
~/api/docker-compose.yml
컨테이너가 컨테이너에 front
요청을 보낼 수 있는지 어떻게 확인할 수 api
있습니까?
나는 알고 --default-gateway
옵션을 사용하여 설정할 수 있습니다 docker run
특정 IP 주소가이 컨테이너에 할당 할 수 있도록하는 것이 개별 컨테이너하지만 사용할 때이 옵션을 사용할 수없는 것으로 보인다 docker-compose
.
현재 나는 일을 끝내고 docker inspect my_api_container_id
출력에서 게이트웨이를 봅니다. 작동하지만 문제는이 IP가 무작위로 표시되므로 신뢰할 수 없다는 것입니다.
따라서이 질문의 다른 형태는 다음과 같습니다.
- docker-compose를 사용하여 고정 IP 주소를 특정 컨테이너에 부여 할 수 있습니까?
그러나 결국 내가보고있는 것은 다음과 같습니다.
- 서로 다른 두 개의 도커 작성 프로젝트는 어떻게 서로 통신 할 수 있습니까?
답변
서로 대화하려는 컨테이너가 동일한 네트워크에 있는지 확인하면됩니다. 네트워크는 일류 도커 구조이며 작성에만 국한되지 않습니다.
# front/docker-compose.yml
version: '2'
services:
front:
...
networks:
- some-net
networks:
some-net:
driver: bridge
…
# api/docker-compose.yml
version: '2'
services:
api:
...
networks:
- front_some-net
networks:
front_some-net:
external: true
참고 : 앱의 네트워크에는 “프로젝트 이름”을 기반으로 이름이 지정되어 있습니다.이 이름은 현재 존재하는 디렉토리 이름을 기반으로합니다.이 경우 접두사
front_
가 추가되었습니다.
그런 다음 서비스 이름을 사용하여 서로 대화 할 수 있습니다. 에서 front
당신이 할 수있는 ping api
반대의 경우도 마찬가지.
답변
@ johnharris85의 훌륭한 답변에 약간의 언급 만하면 도커 작성 파일을 실행할 때 ” default
“네트워크가 만들어 지므로 다른 작성 파일에 외부 네트워크로 추가 할 수 있습니다.
# front/docker-compose.yml
version: '2'
services:
front_service:
...
…
# api/docker-compose.yml
version: '2'
services:
api_service:
...
networks:
- front_default
networks:
front_default:
external: true
나 에게이 접근법은 첫 번째 docker-compose 파일을 소유하지 않았고 통신하기를 원했기 때문에 더 적합했습니다.
답변
업데이트 : 작성 파일 버전 3.5 기준 :
이것은 이제 작동합니다 :
version: "3.5"
services:
proxy:
image: hello-world
ports:
- "80:80"
networks:
- proxynet
networks:
proxynet:
name: custom_network
docker-compose up -d
‘custom_network’라는 네트워크에 가입합니다. 존재하지 않으면 만들어집니다!
root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done
이제 당신은 이것을 할 수 있습니다 :
version: "2"
services:
web:
image: hello-world
networks:
- my-proxy-net
networks:
my-proxy-net:
external:
name: custom_network
외부 네트워크에있는 컨테이너가 생성됩니다.
문서에서 아직 참조를 찾을 수 없지만 작동합니다!
답변
의 모든 컨테이너는 다음 구성 으로 기본 네트워크에 api
가입 할 수 있습니다 .front
# api/docker-compose.yml
...
networks:
default:
external:
name: front_default
docker compose guide : 기존 네트워크 사용 (아래 참조)을 참조하십시오.
답변
이전 게시물 정보는 정확하지만 “external_links”로 연결해야하는 컨테이너 연결 방법에 대한 세부 정보는 없습니다.
이 예제가 당신에게 더 명확 해지기를 바랍니다.
-
두 개의 서비스 (svc11 및 svc12)가있는 app1 / docker-compose.yml과 두 개의 서비스 (svc21 및 svc22)가있는 app2 / docker-compose.yml이 있고 교차 방식으로 연결해야한다고 가정하십시오.
-
svc11은 svc22의 컨테이너에 연결해야합니다
- svc21은 svc11의 컨테이너에 연결해야합니다.
따라서 구성은 다음과 같아야합니다.
이것은 app1 / docker-compose.yml입니다.
version: '2'
services:
svc11:
container_name: container11
[..]
networks:
- default # this network
- app2_default # external network
external_links:
- container22:container22
[..]
svc12:
container_name: container12
[..]
networks:
default: # this network (app1)
driver: bridge
app2_default: # external network (app2)
external: true
이것은 app2 / docker-compose.yml입니다.
version: '2'
services:
svc21:
container_name: container21
[..]
networks:
- default # this network (app2)
- app1_default # external network (app1)
external_links:
- container11:container11
[..]
svc22:
container_name: container22
[..]
networks:
default: # this network (app2)
driver: bridge
app1_default: # external network (app1)
external: true
답변
Compose 1.18 (사양 3.5)부터 필요한 모든 Compose YAML 파일에 대해 고유 한 사용자 지정 이름을 사용하여 기본 네트워크를 재정의 할 수 있습니다. 다음을 추가하는 것만 큼 간단합니다.
networks:
default:
name: my-app
위의 내용은 귀하가 (또는 4 이상에서 더 이상 사용하지 않는 경우)
version
설정 한 것으로 가정합니다3.5
.
다른 답변들도 똑같이 지적했다. 이것은 간단한 요약입니다.
답변
다음을 사용하여 모든 컨테이너 docker-compose
를 동시에 함께 구성하여 모든 컨테이너가 동일한 네트워크에 연결되도록합니다.
docker compose --file ~/front/docker-compose.yml --file ~/api/docker-compose.yml up -d