首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令在docker-compose.yml中不执行。

命令在docker-compose.yml中不执行。
EN

Stack Overflow用户
提问于 2018-08-16 09:45:55
回答 1查看 13K关注 0票数 6

我正在控制容器的启动顺序,因为我的docker-compose.yml总共有5个容器,它们需要按顺序启动。

我已经在网上查阅了很多关于控制启动订单的建议。

问题是

命令:“./等待-it.sh.for”,“兔子:15672”

当容器启动时,不会在Docker容器中执行。

下面是一个详细的描述:

  1. 我有一个Spring项目,下面给出了Dockerfile。 来自openjdk:8-jre-高寒复制./target/spring-cloud-config-server-0.0.1-SNAPSHOT.jar /usr/source/ COPY -Wait-forit.sh /usr/source/ RUN chmod 777 /usr/source/等待-for-it.sh运行apk -no-cache bash bash WORKDIR /usr/source/暴露8080个ENTRYPOINT "java“、"-jar”、"spring-cloud-config-server-0.0.1-SNAPSHOT.jar“

2.我使用的是wait-for-it.sh bash脚本,它直接放在我的Dockerfile所在的同一个根目录中。3.在同一个根目录中,我有docker-compose.yml,如下所示

代码语言:javascript
复制
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"

现在,当我建立码头形象,并启动它。我看到在/usr/source/目录中的Docker容器中存在等待-it.sh,我的jar文件就在其中。

当我跑的时候

码头工人-组成

我期望一旦Rabbitmq服务器启动,那么server就会启动。但这并不是真的发生。即使我在命令中运行任何命令:,它也不会被执行。我已审理了所有可能的案件,但没有任何运气。

据我所知,command: ["./wait-for-it.sh","rabbitmq:15672"]是在容器启动时执行的。那么它在ENTRYPOINT ["java", "-jar", "spring-cloud-config-server-0.0.1-SNAPSHOT.jar"]之前执行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 10:18:21

容器是通过执行单个二进制文件来启动的,当该可执行文件退出时,容器本身就退出。因此,当您在容器上定义入口点和命令时,结果是将命令作为参数传递给入口点。在这种情况下,您的入口点需要知道如何处理命令中的自动参数。您不能得到的是一个运行两个命令的容器。

典型的用法是使入口点成为执行任何初始化步骤的脚本,比如wait-for-it命令。然后,最后一行通常是exec "$@",它用"$@"定义的新可执行文件(即命令行参数)替换pid 1中的入口点脚本。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51874113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档