美文网首页Docker容器
docker cmd 传参数

docker cmd 传参数

作者: Yellowtail | 来源:发表于2018-09-14 16:08 被阅读5次

已知

docker CMD 有三种形式

    CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

    CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

三种形式的区别和联系,详情可以查看链接里对cmd的介绍
https://www.jianshu.com/p/78f4591b7ff0

question

我现在想要在cmd执行的时候,使用参数
but how?

try

1. 准备脚本 startup.sh

就是一个打印参数并立即退出的脚本

[root]# cat startup.sh 
#!/bin/bash

echo "in startup, args: $@"

2. section 1:参数写死

Dockerfile 如下:

[root@fangjike temp]# cat Dockerfile 
FROM python:2.7-slim

MAINTAINER yellowtail

COPY startup.sh /opt

RUN chmod +x /opt/startup.sh

ARG envType=xxx
ENV envType ${envType}

CMD ["/opt/startup.sh","aa"]

build

[root@fangjike temp]# docker build -t yellow:1.0 --build-arg envType=dev .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM python:2.7-slim
 ---> c9cde4658340
Step 2 : MAINTAINER yellowtail
 ---> Using cache
 ---> ec9055841b3e
Step 3 : COPY startup.sh /opt
 ---> Using cache
 ---> efe6e9eaac34
Step 4 : RUN chmod +x /opt/startup.sh
 ---> Using cache
 ---> ef08b08b8a57
Step 5 : ARG envType=xxx
 ---> Using cache
 ---> aef78f5dfcf3
Step 6 : ENV envType ${envType}
 ---> Using cache
 ---> 302f6a18954c
Step 7 : CMD /opt/startup.sh aa
 ---> Running in 34300c36fc9b
 ---> 61f41a3f9f27
Removing intermediate container 34300c36fc9b
Successfully built 61f41a3f9f27

run

[root@fangjike temp]# docker run -ti --rm=true yellow:1.0
in startup, args: aa

3. section 2:动态参数

Dockerfile 最后一行如下:

CMD ["/opt/startup.sh","${envType}"]

build

docker build -t yellow:2.0 --build-arg envType=dev .

输出忽略の,大家也不想看吧

run

[root@fangjike temp]# docker run -ti --rm=true yellow:2.0
in startup, args: ${envType}

4. section 3:动态参数

Dockerfile 最后一行如下:

CMD ["/opt/startup.sh", ${envType}]

build

docker build -t yellow:3.0 --build-arg envType=dev .

run

[root@fangjike temp]# docker run -ti --rm=true yellow:3.0
/bin/sh: 1: [/opt/startup.sh,: not found

可以看到报错了,找不到

原因是什么呢?
看了下官网文档 https://docs.docker.com/engine/reference/builder/#cmd
数组形式的cmd ,是docker来运行命令,是不支持参数替换的
shell形式的cmd,是docker来运行shsh再运行我们写的命令,而sh是支持参数替换的
so,try again

5. section 4:动态参数

Dockerfile 最后一行如下:

CMD /opt/startup.sh ${envType}

build

docker build -t yellow:4.0 --build-arg envType=dev .

run

[root@fangjike temp]# docker run -ti --rm=true yellow:4.0
in startup, args: dev

可以看到符合我们的预期哦

solution

  1. 使用cmdshell形式,也就是
CMD command param1 param2 
  1. build的时候传参
    docker build -t yellow:4.0 --build-arg envType=dev .

参考

https://www.cnblogs.com/lienhua34/p/5170335.html
https://docs.docker.com/engine/reference/builder/#cmd
https://www.jianshu.com/p/78f4591b7ff0

相关文章

  • docker cmd 传参数

    已知 docker CMD 有三种形式 三种形式的区别和联系,详情可以查看链接里对cmd的介绍https://ww...

  • Docker中CMD与ENTRYPOINT的简明理解

    CMD提供容器启动的默认行为,运行不指定运行的命令及参数,会默认执行CMD中的。 例如hello镜像的Docker...

  • 容器:docker-compose 使用

    1. cmd 与 docker-compose 对比 通过 cmd 创建容器 通过 docker-compose ...

  • Docker学习资料

    Docker入门 Docker gitbook RUN, ENTRYPOINT, CMD的区别 Docker数据卷...

  • Docker CMD

    Docker CMD 最近在学习docker相关的知识,看了一下docker从入门到实践,说实话这本书感觉一般般,...

  • Dockerfile中CMD和ENTRYPOINT探究

    CMD 引用自Docker的官方文档: 我们编写一个简单的脚本,脚本的功能是打印命令行中输入的参数,如下:entr...

  • Kafka将EMQX的消息传递给消费者处理(Windows平台)

    1、Docker安装Kafka 打开Cmd命令行 创建docker-compose.yml文件 在docker-c...

  • Dockerfile

    打包一个可带参数的镜像 1.打包一个docker images(可以传参使用 2.打包 3.调用(可带参数)

  • Docker四:CMD

    格式 1.shell 格式:CMD <命令>2.exec 格式:CMD ["可执行文件", "参数1", "参数2...

  • 模板字符串

    在做react项目中,遇到传参的链接无法发生跳转,现场如下 后来在cmd中,打开node,验证是否是参数传递的语法...

网友评论

    本文标题:docker cmd 传参数

    本文链接:https://www.haomeiwen.com/subject/qnvogftx.html