Docker Compose依赖的命名容器

时间:2018-12-06 14:23:09

标签: docker docker-compose

我正在尝试使用docker compose来启动我的容器。此容器依赖于其他两个名称分别为“ rabbitmq”和“ mysqldb”的容器。

我的情况是已经使用上述名称创建了相关的命名容器。这是由于mysql需要一些其他配置。

如何使用docker-compose将这两个容器链接到此容器。这样,当启动此myservice容器时,它也将启动我的命名容器。

不胜感激。

myservice:
image:  myaccount/myservice
ports:
  - "8081:8081"
restart:  always
depends_on: 
  - rabbitmq
  - mysqldb
environment:
  SPRING_DATASOURCE_URL: 'jdbc:mysql://mysqldb:3306/myservice'
  SPRING_PROFILES_ACTIVE: 'mysql'
  SPRING_RABBITMQ_HOST: 'rabbitmq'
healthcheck:
  test: ["CMD", "curl", "-f", "http://192.168.99.100:8081/actuator/health"]
  interval: 1m30s
  timeout: 10s
  retries: 3

更新

我能够使用external_links和默认桥来解决此问题。

    version: '3'

myservice:
image:  myaccount/myservice
ports:
  - "8081:8081"
restart:  always
external_links: 
  - rabbitmq
  - mysqldb
network_mode: bridge
environment:
  SPRING_DATASOURCE_URL: 'jdbc:mysql://mysqldb:3306/myservice'
  SPRING_PROFILES_ACTIVE: 'mysql'
  SPRING_RABBITMQ_HOST: 'rabbitmq'
healthcheck:
  test: ["CMD", "curl", "-f", "http://192.168.99.100:8081/actuator/health"]
  interval: 1m30s
  timeout: 10s
  retries: 3

任何其他选择都值得赞赏。问题是使用这种方法,相关的Docker容器已经需要运行。但是,如果docker容器出现故障,我想撰写相同的容器。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我相信您需要在每个docker-compose文件中定义一个网络。

networks:
  mynet:

接下来,将该网络添加到每个容器定义

myservice:
  networks:
    - mynet

答案 1 :(得分:0)

docker-compose up未运行已创建的容器。它从图像创建容器并运行它们。因此,我假设您已经为这些容器准备了图像(或dockerfiles)。但是,您可以将--no-recreatedocker-compose up一起使用,以重新使用已构建的容器,如果您经常使用时遇到问题,这可能是一种解决方法。

在docker-compose.yml中的services下,您只需要为其他两个图像定义一个服务。下面的示例。

services:
    service1:
        image: images/service1image
    depends_on:
     - service2
     - service3
    service2:
        image: images/service2image
    service3:
        build: docker/service3

如果以此方式定义网络,则无需按照terrywb的建议定义网络。 docker-compose自动创建一个通用的桥接网络,并映射它们之间所有已定义服务的端口。但是,如果您没有将它们定义为服务,则可能需要定义一个网络来连接它们,当然,如果这样做,则将无法使用docker-自动同时启动它们-撰写,这就是您要解决的整个问题。如果您真的不希望它们作为服务,那么我只能建议您创建一个“ startup.sh” bash / shell文件来处理此问题。到那时,您将尝试在docker-compose提供的功能范围之外做一些事情。