如何将一个泊坞窗服务与其他泊坞窗服务链接?

时间:2018-08-27 01:23:44

标签: docker docker-compose docker-swarm

我有12个Docker容器。当我单独运行时,我可以使用--link连接其中的一些链接,例如将Web应用程序链接与mysql db。但是当我在docker swarm中将它们作为服务运行时(例如docker create service),我无法链接它们,因为--link在docker service create命令中不可用。 如果我使用docker-compose.yml文件运行所有容器,则可以链接。但这是另一个问题。 假设我在docker-compose文件或docker堆栈中有12个不同的容器(组件),如何更新单个容器或组件?我是否需要重新部署整个Docker堆栈?

1 个答案:

答案 0 :(得分:0)

您只需要在每个docker-compose.yml文件中将容器放入同一网络中即可。

首先,您需要使用docker创建一个网络:

docker network create -d bridge custom 

之后,您需要将docker-compose文件中的网络更改为新网络,如果需要,您可以像示例一样使用external_links:

示例文件1:

version: '3'
services:
  php-server:
    container_name: myphp
    image: devilxatoms/taproject:latest
    ports:
     - "9000:9000"
    external_links:
      - mysql:mysql
    networks:
      - custom

networks:
  custom:
    external: true

示例文件2:

version: '3'
    services:
      mysql:
        container_name: mydb
        image: mysql:latest
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=root
        ports:
         - "3306:3306"
        networks:
          - custom

    networks:
      custom:
        external: true

要测试它,我只访问了我的mysql容器的bash并将ping发送到另一个容器:

MySQL容器:

# ping php-server
PING php-server (172.26.0.3) 56(84) bytes of data.
64 bytes from myphp.custom (172.26.0.3): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=2 ttl=64 time=0.368 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=4 ttl=64 time=0.136 ms
^C
--- php-server ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3094ms
rtt min/avg/max/mdev = 0.071/0.174/0.368/0.115 ms

PHP容器:

# ping mysql
PING mysql (172.26.0.2) 56(84) bytes of data.
64 bytes from mydb.custom (172.26.0.2): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=2 ttl=64 time=0.107 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=3 ttl=64 time=0.109 ms
^C
--- mysql ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2094ms
rtt min/avg/max/mdev = 0.075/0.097/0.109/0.015 ms

要更新特定服务,您可以使用所做的更改来更新docker-compose文件,并告诉docker-compose您需要使用以下内容更新服务:

docker-compose up -d --no-deps <service_name> 

-d 是“分离”模式:在后台运行容器,打印新的容器名称。

-禁止访问将不会启动链接的服务。

参考: https://docs.docker.com/compose/compose-file/#external_links