首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile命令不覆盖Dockerfile CMD

Dockerfile命令不覆盖Dockerfile CMD
EN

Stack Overflow用户
提问于 2020-09-14 11:13:21
回答 1查看 19.7K关注 0票数 16

码头工人-撰写参考资料说:

命令 重写默认命令。

我的Dockerfile

代码语言:javascript
复制
FROM adoptopenjdk/maven-openjdk8

RUN mkdir /config

COPY /src/main/resources/application.properties /config/application.properties
COPY /src/main/resources/logback.xml /config/logback.xml

# copy wait-for-it-sh tool to sync container starting
COPY wait-for-it.sh /
RUN chmod +x /wait-for-it.sh

VOLUME /tmp

ADD target/my-svc-1.jar app.jar

RUN sh -c 'touch /app.jar'

ENV JAVA_OPTS=""

CMD [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

有趣的一部分我的对接者-Compose.yml

代码语言:javascript
复制
version: '3'

services:
  ..
  my-svc:
    container_name: my-svc-container
    build:
      context: ./my-svc-folder
      dockerfile: Dockerfile
    ports:
      - "9100:9100"
      - "5005:5005"
    depends_on:
      - db
    command: ["./wait-for-it.sh", "my-svc-dbserver:3306", "--", "sh", "-c", "java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /app.jar"]
  ...

船坞的输出-组成建造:

代码语言:javascript
复制
Building my-svc
Step 1/11 : FROM adoptopenjdk/maven-openjdk8
 ---> b3ad935008a1
Step 2/11 : RUN mkdir /config
 ---> Using cache
 ---> 5db347c13050
Step 3/11 : COPY /src/main/resources/application.properties /config/application.properties
 ---> Using cache
 ---> ade3653a018a
Step 4/11 : COPY /src/main/resources/logback.xml /config/logback.xml
 ---> Using cache
 ---> 94277fd95be1
Step 5/11 : COPY wait-for-it.sh /
 ---> Using cache
 ---> 80ac64c7c994
Step 6/11 : RUN chmod +x /wait-for-it.sh
 ---> Using cache
 ---> 1a0c99bc10ad
Step 7/11 : VOLUME /tmp
 ---> Using cache
 ---> 81864f3c9fda
Step 8/11 : ADD target/my-svc-1.jar app.jar
 ---> Using cache
 ---> 56cc5c149e37
Step 9/11 : RUN sh -c 'touch /app.jar'
 ---> Using cache
 ---> 9db3f5d983cc
Step 10/11 : ENV JAVA_OPTS=""
 ---> Using cache
 ---> a5c4828b6539
Step 11/11 : CMD [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
 ---> Using cache
 ---> cb1fd876d8d6
Successfully built cb1fd876d8d6
Successfully tagged src_my-svc:latest

因此,最后一步显示为CMD [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ],它位于Dockerfile中,而不是Dockerfile中。

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-14 11:26:13

重写是在运行时进行的,运行时是基于create的容器,然后是start。最后一个步骤是在实际buildingimage阶段,它(正确地)遵循Dockerfile的说明。

因此,如果您继续使用docker-compose up,将创建和启动的容器将在docker-compose.yaml文件中提供“重写”配置。

来自重写Dockerfile图像默认值

重写Dockerfile图像默认值 当开发人员从https://docs.docker.com/engine/reference/builder/构建映像或提交映像时,开发人员可以设置许多默认参数,这些参数在映像作为容器启动时生效。在运行时不能重写四个Dockerfile命令:FROMMAINTAINERRUNADD。在docker run**.**中,其他一切都有相应的覆盖。

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

https://stackoverflow.com/questions/63883149

复制
相关文章

相似问题

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