关于docker:在docker_compose.yml中链接和depends_on之间的差异

Difference between links and depends_on in docker_compose.yml

根据Docker Compose的撰写文件文档:

  • depends_on表示服务之间的依赖关系。
  • links—链接到另一个服务中的容器,并以依赖于的方式表示服务之间的依赖关系。

我不明白链接到其他容器的目的,所以两个选项之间的区别对我来说仍然很困难。

如果有一个例子的话会容易得多,但是我找不到任何例子。

我注意到,当我将容器B与容器A链接时,容器B将在容器A的外壳内"可Ping"起来。

我在容器A的bash中运行ping B,得到了这样的结果(仅供参考,图片来自互联网)

enter image description here


这个回答是码头工人组成2版和信息版,所以在3

你仍然可以访问数据,当你使用_ depends on。

如果你看看搬运工搬运工和Django提供的文档,你可以访问数据库这样的安静。

1
2
3
4
5
6
7
8
9
10
11
12
13
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

什么是左和_取决于之间的差异?

左:

当你创建一个容器,一个数据库,例如:

1
2
3
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql

docker inspect d54cf8a0fb98 |grep HostPort

你可以找到

1
"HostPort":"32777"

这意味着你可以从你的本地主机端口连接的数据库(在容器32777 3306端口),但这要改变每次你重启或清除容器。这样你可以确保你的链接连接到数据库和我不知道它是端口。

1
2
3
web:
  links:
   - db

_ depends on:

我发现了一个很好的博客:从乔治docker-compose.yml V1到V2的法拉利

When docker-compose executes V2 files, it will automatically build a network between all of the containers defined in the file, and every container will be immediately able to refer to the others just using the names defined in the docker-compose.yml file.

So we don’t need links anymore; links were used to start a network communication between our db container and our web-server container, but this is already done by docker-compose

更新_ depends on

安切洛蒂表示依赖之间的服务,这两个效果:

  • 码头启动要启动服务的组成依赖的命令。在下面的例子中,将开始发生在DB和Web。
  • 码头工人组成化妆服务会自动包含服务的依赖关系。在下面的例子,码头组成上要创建Web和DB和再发射。

简单的例子:

1
2
3
4
5
6
7
8
9
10
11
version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

Note: depends_on will not wait for db and redis to be"ready" before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.


[答案]:2016年9月更新这个文件是用于码头包括V1(AS显示下面提供的样本文件)。其他答案为V2,由windsooon湖"。

回答:[原创]

它是很清晰的文档。depends_on决定的依赖和容器links勋章不仅是创作和论文,但也

Containers for the linked service will be reachable at a hostname identical to the alias, or the service name if no alias was specified.

例如,如果docker-compose.yml以下文件:

1
2
3
4
5
6
7
8
9
10
11
web:
  image: example/my_web_app:latest
  links:
    - db
    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

一个内部weblinks,代码可以访问数据库使用db:54325432,如果端口是暴露在db形象。如果使用的是depends_on,本不可以启动,但一阶容器是正确的。


更新后的需求后,links选项是过时的。

基本上,links是不再需要,因为它的主要用途,制作容器到达另一个由环境变量的加入,包括一个implicitly network。当容器是放置在相同的网络,它是由使用的集装箱到达对方的名字和其他作为主机的别名。

docker run--link是过时的和没有一个自定义的网络应用。

1
2
3
docker network create mynet
docker run -d --net mynet --name container1 my_image
docker run -it --net mynet --name container1 another_image

depends_on表示启动(implicitly图像阶阶和拉),这是一个良好的links侧的影响。