此答案适用于docker-compose 版本2,也适用于版本3
当您使用depends_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
链接和depends_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
取决于:
我从Giorgio Ferraris Docker-compose.yml中找到了一个不错的博客:从V1到V2
当docker-compose执行V2文件时,它将自动在文件中定义的所有容器之间建立网络,并且每个容器都将能够仅使用docker-compose.yml文件中定义的名称立即引用其他容器。
和
因此,我们不再需要链接。链接用于启动数据库容器和Web服务器容器之间的网络通信,但这已经由docker-compose完成
更新资料
表达服务之间的依赖关系,这有两个作用:
docker-compose up
将以依赖关系顺序启动服务。在以下示例中,db和redis将在web之前启动。
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
注意:depends_on在启动Web之前不会等待db和redis处于“就绪”状态-仅在启动之前。如果您需要等待服务准备就绪,请参阅控制启动顺序以获取有关此问题的更多信息以及解决该问题的策略。
--link
标志现在是Docker不推荐使用的旧功能,文档显示“可能最终被删除” 。Docker:Legacy container links。建议不要使用Docker网络功能或docker compose方法。我认为这对这里了解此功能的任何人都会有所帮助。