이 답변은 docker-compose 버전 2에 대한 것이며 버전 3 에서도 작동합니다.
depend_on을 사용하면 여전히 데이터에 액세스 할 수 있습니다.
docker docs Docker Compose 및 Django 를 보면 여전히 다음과 같이 데이터베이스에 액세스 할 수 있습니다.
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
링크와 depend_on의 차이점은 무엇입니까?
연결:
데이터베이스의 컨테이너를 만들 때 예를 들면 다음과 같습니다.
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
그리고 당신은 찾을 수 있습니다
"HostPort": "32777"
즉, 로컬 호스트 포트 32777 (컨테이너의 3306)에서 데이터베이스를 연결할 수 있지만이 포트는 컨테이너를 다시 시작하거나 제거 할 때마다 변경됩니다. 따라서 링크를 사용하여 항상 데이터베이스에 연결하고 어떤 포트인지 알 필요가 없습니다.
web:
links:
- db
depend_on :
Giorgio Ferraris Docker-compose.yml 에서 멋진 블로그를 찾았습니다 .V1에서 V2까지
docker-compose가 V2 파일을 실행하면 파일에 정의 된 모든 컨테이너간에 네트워크를 자동으로 구축하며 모든 컨테이너는 docker-compose.yml 파일에 정의 된 이름을 사용하여 다른 컨테이너를 즉시 참조 할 수 있습니다.
과
따라서 더 이상 링크가 필요하지 않습니다. 링크는 DB 컨테이너와 웹 서버 컨테이너 사이의 네트워크 통신을 시작하는 데 사용되었지만 이미 docker-compose에 의해 수행됩니다.
최신 정보
서비스 간 특급 의존성 :
docker-compose up
종속성 순서대로 서비스를 시작합니다. 다음 예에서 db 및 redis는 웹보다 먼저 시작됩니다.
docker-compose up SERVICE
SERVICE의 종속성이 자동으로 포함됩니다. 다음 예제에서 docker-compose up 웹은 db 및 redis를 생성하고 시작합니다.
간단한 예 :
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
참고 : depend_on은 웹을 시작하기 전에 db 및 redis가 "준비"될 때까지 기다리지 않으며 시작될 때까지만 대기합니다. 서비스가 준비 될 때까지 기다려야하는 경우이 문제에 대한 자세한 내용 및 해결 전략은 시작 순서 제어를 참조하십시오.
--link
플래그는 이제 Docker의 더 이상 사용되지 않는 레거시 기능이며 설명서에는 "결국 제거 될 수 있습니다"라는 Docker : 레거시 컨테이너 링크가 나와 있습니다 . Docker 네트워크 기능 또는 docker compose 방법 을 사용하지 않는 것이 좋습니다 . 나는 이것이이 기능에 대해 배우는 사람에게 도움이 될 것이라고 생각했습니다.