Dockerfile CMD 中如何执行多条命令?

2019-06-18 18:00:05 +08:00
 caneman

Dockerfile 中 CMD 只能有一条,多了只会执行最后一条,如何解决这个问题?

我想在镜像里执行 python 1.py 和 python 2.py

Dockerfile 中

....
....
CMD python 1.py
CMD python 2.py

只会执行最后一句,我该如何解决这个问题?

(进入内容器里面确实可以再去执行另一条,但有没有办法,在容器启动的时候就能执行两条?)

不太懂 shell 脚本,可以通过ENTRYPOINT xx.sh指定脚本的方式来实现吗?

如果可以的话,脚本该怎么写呢?

1.py 2.py xx.sh 均在同一工作目录)

13023 次点击
所在节点    Docker
9 条回复
tony601818
2019-06-18 18:11:07 +08:00
用`&&`配合反斜杠换行转译,或者写 shell script
HuHui
2019-06-18 18:13:28 +08:00
分俩镜像
endoffight
2019-06-18 18:19:02 +08:00
1,托管程序,比如 supervisor
2,分成两个容器
3, 让第一个 cmd 后台运行,然后&&接 cmd2
hzwjz
2019-06-18 18:21:08 +08:00
你回顾一下,你是怎么在 terminal 中怎么执行那两个 py 文件的,把两命令按前后顺序放到 xx.sh 。再配合 entrypoint 即可

[entrypoint]( https://docs.docker.com/engine/reference/builder/#entrypoint)
liqingcan
2019-06-18 18:21:35 +08:00
这两个都是在启动镜像的时候执行吗?是的话只能写 sh 脚本。如果不是的话。是在打包镜像的时候就可以执行的用 RUN 命令
liqingcan
2019-06-18 18:22:09 +08:00
@liqingcan 个人愚见
ysjiang4869
2019-06-18 19:11:54 +08:00
docker 官网推荐 supervisor 或者自己写一个脚本执行多程序;执行多程序不建议放到后台,因为可能要考虑日志和检测进程退出后退出容器,自己写过 shell 脚本如果需要可以给你参考
caneman
2019-06-20 14:57:11 +08:00
@ysjiang4869
我创建了一个 1.sh, 里面写的是`python 1.py && python 2.py`在 linux 里面测试这个 sh 正常运行

但是我在 Dockerfile 中设置 ENTRYPOINT ["/xx/1.sh"]的时候会报

`standard_init_linux.go:207: exec user process caused "exec format error"`

这个错误是怎么回事?查阅了一些资料,都说是 sh 文件类型的问题,但是我通过 vim 的 :set ff 查看了 1.sh 的文件类型,是

unix 的没错,我想问一下是因为我的脚本写的有问题吗?不太懂这一块
caneman
2019-06-20 15:00:13 +08:00
@ysjiang4869 解决了,我的 sh 没有加`#!/bin/bash`这个.....感觉是不是就跟把 main 写成了 mian 一样的错误?...好低级...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575208

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX