Docker compose命令;t覆盖Dockerfile CMD



Docker撰写参考说:

命令

替代默认命令。

我的Dockerfile

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" ]

我的docker作文中有趣的部分。yml

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"]
...

docker组成构建的输出:

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中,而不是在docker compose中。

我在这里错过了什么?

重写发生在运行时,也就是说,您先create一个基于image的容器,然后start它。您看到的最后一步是在实际imagebuilding阶段,它(正确地(遵循Dockerfile的指示。

因此,如果继续使用docker-compose up,将创建和启动的容器将具有";被覆盖";CCD_ 9文件中提供的配置。


从覆盖Dockerfile镜像默认值

覆盖Dockerfile映像默认值

当开发人员从Dockerfile构建图像时,或者当她提交图像时,开发人员可以设置一些默认参数,这些参数在图像作为容器启动时生效。Dockerfile中的四个命令在运行时无法重写:FROMMAINTAINERRUNADD其他所有内容在docker run中都有相应的覆盖

最新更新