[英]Docker-compose services starting order
我正在嘗試使用docker-compose按順序啟動3個docker容器。 我有以下容器:
我希望僅在其他兩個容器完成啟動后才能啟動“ app-service”容器。 我正在使用“ wait-for”腳本來等待服務變得可用( https://github.com/Eficode/wait-for )。
這是我在docker-compose.yml中擁有的
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
config.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-db.dockerfile
FROM mariadb:10.3
app.dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/app-1.0-final.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
EXPOSE 8080
當我運行“ docker-compose up” cmd時,“ app-service”容器在“ app-service-db”和“ config-service”完成之前啟動,並退出,因為它找不到任何連接。 我該如何進行這項工作,並僅在其他兩個容器啟動后才強制啟動“ app-service”容器。
提前致謝。
您可以確保使用depends_on
關鍵字在depends_on
docker-compose.yml
定義的服務的開始順序: https : depends_on
這是Docker運行時的事情。 您無需在Dockerfile
指定此Dockerfile
,就可以從該文件中構建Docker映像。
Docker在啟動服務之前不會等待您的配置和數據庫服務完成啟動。 但是Docker在官方文檔中有一篇文章解釋了解決此用例的兩種方法: https : //docs.docker.com/compose/startup-order/
文章https://docs.docker.com/compose/startup-order/中是這兩種解決方案的示例。
我在您的配置中看到更多問題。 入口點和命令關系存在問題,要完全理解請參閱此內容。Dockerfile中的CMD和ENTRYPOINT有什么區別? 因此,您的切入點是運行Java應用程序-這可能就是為什么wait無法正常工作的原因。 我建議通過在docker-compose中添加以下部分來覆蓋應用程序服務的入口點:
entrypoint: sh -c './wait-for app-service-db:3306 && ./wait-for config-service:8888 && java -jar app.jar'
我也看不到您正在將此腳本等待添加到Docker映像的位置(在應用程序的dockerfile中缺少ADD嗎?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.