【发布时间】:2019-01-23 05:46:24
【问题描述】:
我正在控制容器的启动顺序,因为我的docker-compose.yml 共有 5 个容器,它们需要按顺序启动。
我浏览了网上很多关于控制启动顺序的建议。
问题是
命令:["./wait-for-it.sh","rabbitmq:15672"]
容器启动时没有在 Docker 容器内执行。
这里有详细的说明:
-
我有一个 Spring Boot 项目,下面给出了 Dockerfile。
FROM openjdk:8-jre-alpine COPY ./target/spring-cloud-config-server-0.0.1-SNAPSHOT.jar /usr/source/ COPY wait-for-it.sh /usr/source/ RUN chmod 777 /usr/source/wait-for-it.sh RUN apk add --no-cache bash WORKDIR /usr/source/ EXPOSE 8080 ENTRYPOINT ["java", "-jar", "spring-cloud-config-server-0.0.1-SNAPSHOT.jar"]
2.我正在使用wait-for-it.sh bash 脚本,该脚本直接放置在我的 Dockerfile 所在的同一根目录中。 3. 在同一个根目录下,我有 docker-compose.yml,如下所示
version: "3.3"
services:
rabbitmq:
image: rabbitmq:management
ports:
- "15672:15672"
- "5672:5672"
volumes:
- /root/rabbitmq_data:/var/lib/rabbitmq
spring-cloud-config-server:
image: rajeevshukla/spring-cloud-config-server
container_name: spring_cloud_config_server
depends_on:
- rabbitmq
links:
- rabbitmq
command: ["./wait-for-it.sh","rabbitmq:15672"]
ports:
- "8888:8080"
environment:
- "SPRING_PROFILES_ACTIVE=prod"
现在,当我构建 Docker 映像并启动它时。我看到 wait-for-it.sh 存在于 Docker 容器中,位于我的 jar 文件所在的 /usr/source/ 目录中。
当我跑步时
码头工人组成
我期待一旦 Rabbitmq 服务器启动,那么 spring-cloud-config-server 应该启动。但实际上并没有发生。即使我在 command: 中运行任何命令,它也不会被执行。我已经尝试了所有可能的情况,但没有运气。
据我所知,command: ["./wait-for-it.sh","rabbitmq:15672"] 在容器启动时被执行。那么它会在ENTRYPOINT ["java", "-jar", "spring-cloud-config-server-0.0.1-SNAPSHOT.jar"] 之前执行吗?
【问题讨论】:
-
stackoverflow.com/questions/21553353/… 简而言之,
CMD附加到ENTRYPOINT并作为一个命令运行。先不执行CMD再执行ENTRYPOINT。
标签: docker docker-compose