替换dockerfile中cmd的第一个值

时间:2017-09-15 14:28:39

标签: docker dockerfile

我正在使用docker测试并尝试创建自己的docker镜像。

我的第一个Dockerfile只需将ubuntu作为基本映像并安装cowsay。

Dockerfile 1:

FROM ubuntu:latest
RUN apt-get update && apt-get -y install cowsay
ENTRYPOINT ["usr/games/cowsay"]

我使用

构建图像
docker build -t test/cowsay .

并可以使用

运行它
docker run test/cowsay Hello World

在下一步中,我想创建一个图像,如果docker调用没有其他参数,则将默认文本放在cowsay中。对于默认文本,我使用fortune。

Dockerfile 2

FROM test/cowsay:latest
RUN apt-get update && apt-get -y install fortune
ENTRYPOINT []
CMD /usr/games/fortune -s | /usr/games/cowsay -f tux

我使用

构建图像
docker build -t test/fortune .

并使用

运行它
docker run test/fortune


 ________________________________________
/ You possess a mind not merely twisted, \
\ but actually sprained.                 /
 ----------------------------------------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

但至少我只想在docker调用中没有其他参数时才使用fortune中的默认文本。

如果我输入

docker run test / fortune Hello

/ usr / games / fortune -s 必须替换为 Hello

 _______
< Hello >
 -------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

有谁知道如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

您必须使用bash脚本和ENTRYPOINT

执行此操作
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh

<强> entrypoint.sh

if [ $# -eq 0 ]
  then
    /usr/games/fortune -s | /usr/games/cowsay -f tux
else
   echo $@ | /usr/games/cowsay -f tux
fi