我正在尝试使用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容器出现故障,我想撰写相同的容器。有什么想法吗?
答案 0 :(得分:0)
我相信您需要在每个docker-compose文件中定义一个网络。
networks:
mynet:
接下来,将该网络添加到每个容器定义
myservice:
networks:
- mynet
答案 1 :(得分:0)
docker-compose up
未运行已创建的容器。它从图像创建容器并运行它们。因此,我假设您已经为这些容器准备了图像(或dockerfiles)。但是,您可以将--no-recreate
与docker-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提供的功能范围之外做一些事情。