连接两个泊坞容器

时间:2017-08-03 10:43:22

标签: docker docker-compose dockerfile docker-swarm

我有两个现有的docker容器web和db。我想链接这两个容器,以便它们相互通信。如果我使用--link命令意味着它将链接到新图像而不是数据库。

3 个答案:

答案 0 :(得分:16)

使用--link是在docker网络出现之前连接容器的唯一方法。这些提供了一个清洁"解决集装箱间通信问题,同时解决了链接的两个主要限制:

  1. 重新启动链接容器会破坏链接
  2. 运行在不同主机上的容器之间不支持
  3. 链接
  4. 使用docker network,您可以使用--net选项启动指定网络上的容器:

    docker network create example
    docker run -d --net example --name container1 <image>
    docker run -d --net example --name container2 <image>
    

    此时,2个容器可通过地址<container-name>.example互相访问:container1.examplecontainer2.example

答案 1 :(得分:1)

只是让那些偶然遇到这个问题的人受益。 --link功能现在被认为是旧功能,是docker不推荐使用的主要候选功能。 最简单的方法是使用

depends_on:

为此,建议先创建一个像这样的网络:

docker network create <network_name>

然后使用docker-compose生成彼此绑定的服务。在下面的示例中,我将我的spring-boot应用程序绑定到rabbit-mq。您可以从here克隆我的仓库。

version: "3.1"
services:
  rabbitmq-container:
    image: rabbitmq:3.5.3-management
    hostname: rabbitmq-container
    ports:
      - 5673:5673
      - 5672:5672
      - 15672:15672
    networks:
      - resolute

  resolute-container:
    build: .
    ports:
      - 8080:8080
    environment:
      - spring_rabbitmq_host=rabbitmq-container
      - spring_rabbitmq_port=5672
      - spring_rabbitmq_username=guest
      - spring_rabbitmq_password=guest
      - resolute_rabbitmq_publishQueueName=resolute-run-request
      - resolute_rabbitmq_exchange=resolute
    depends_on:
      - rabbitmq-container
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - resolute

networks:
  resolute:
    external:
      name: resolute

了解如何创建名为resolute的网络并将应用程序绑定到同一网络。我还给了Rabbitmq容器一个hostname。这是因为docker现在在容器名称前加上了前缀,这使得按名称绑定服务变得很困难。

答案 2 :(得分:-1)

link用于连接容器,以便在通信建立后它们可以相互通信,它们将能够与您的数据库通信。