我尝试使用docker-compose按顺序启动3个泊坞窗容器。我有以下容器:
我想要' app-service'容器仅在其他两个容器完成启动时启动。 我正在使用'等待'用于等待服务可用的脚本(https://github.com/Eficode/wait-for)。
这是我在docker-compose.yml
中的内容df.loc[(df['date'].dt.day==25) & (cust_df['date'].dt.month==12), 'xmas'] = 1
config.dockerfile
version: '3.4'
services:
config-service:
image: "config-service:1.0"
hostname: config-service
container_name: config-service
build:
context: ../config
dockerfile: config.dockerfile
expose:
- "8888"
logging:
driver: json-file
app-service-db:
image: "app-service-db:10.3"
hostname: app-service-db
container_name: app-service-db
build:
context: ../app-service
dockerfile: app-db.dockerfile
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: app
expose:
- "3306"
logging:
driver: json-file
app-service:
image: "app-service:1.0"
hostname: app-service
container_name: app-service
build:
context: ../app-service
dockerfile: app.dockerfile
ports:
- "8080:8080"
expose:
- "8080"
logging:
driver: json-file
command: sh -c './wait-for app-service-db:3306 && config-service:8888'
depends_on:
- config-service
- app-service-db
APP-db.dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/config-1.0-final.jar config.jar
ENTRYPOINT ["java", "-jar", "config.jar"]
EXPOSE 8888
app.dockerfile
FROM mariadb:10.3
当我运行' docker-compose up' cmd' app-service'容器是在'之前开始的。 app-service-db'和' config-service'已完成并退出,因为它无法找到任何连接。 我怎样才能完成这项工作并强行推动这项工作。 app-service'容器只在其他两个容器启动时启动。
提前致谢。
答案 0 :(得分:1)
我在你的配置中看到了更多问题。 入口点和命令关系存在问题,要完全理解,请参阅此What is the difference between CMD and ENTRYPOINT in a Dockerfile? 所以你的入口点是运行java应用程序 - 这可能是等待不起作用的原因。 我建议通过在docker-compose中添加以下部分来覆盖app-service的入口点:
entrypoint: sh -c './wait-for app-service-db:3306 && ./wait-for config-service:8888 && java -jar app.jar'
此外,我无法看到您将此脚本等待添加到docker镜像中的位置(在app的dockerfile中缺少ADD?)
答案 1 :(得分:0)
您可以使用docker-compose.yml
关键字确保depends_on
中定义的服务的开始排序:
https://docs.docker.com/compose/compose-file/#depends_on
这是Docker运行时的事情。您没有在Dockerfile
中指定此内容,您可以从中构建Docker镜像。
在开始服务之前,Docker不会等待您的配置和数据库服务完成启动。 但是Docker在官方文档中有一篇文章解释了解决这个用例的两种选择: https://docs.docker.com/compose/startup-order/
文章https://docs.docker.com/compose/startup-order/是两种解决方案的示例。