web-dev-qa-db-ja.com

dockerfile:ベースイメージからのCMDまたはENTRYPOINTの使用方法

私が所有していないベースDockerイメージがいくつかあります(そのため、変更できません)。ただし、追加のものがインストールされた状態で、それらから新しいイメージを作成しています。

私が理解できないのは、ベースイメージのCMD(またはENTRYPOINT)をコピーするようにdockerfileに指示する方法です。このようなもの:

FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>

私がやりたいことを実行するためのCMDコマンドの直接構文はないと思います。回避策があるかどうか疑問に思っています。

13
Dave C

新しいDockerfileで空白のままにすると、ベースイメージから継承されます。

例えば:

ベース

FROM ubuntu
CMD ["echo", "AAA"]

layer1

FROM base

上記のイメージをビルドしてlayer1を実行すると、次のようになります。

$ Sudo docker run -it layer1
AAA
19
Vor

@Vorは正しいです。しかし、念のため

# Dockerfile
FROM nginx:stable-Alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /

そして

# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"

nginx:stable-AlpineのデフォルトのCMDはexec "$@"では実行されません。

Dockerfileに自分でデフォルトのnginx-AlpineのCMDを書き込む必要があります(!)

# Dockerfile
FROM nginx:stable-Alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
COPY ./docker-entrypoint.sh /

またはdocker-entrypoint.shを変更します

# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec nginx -g "daemon off;"

それが役に立てば幸い

0
Roman Belov