怎么传递参数到 docker 的程序?

2019-11-18 09:49:58 +08:00
 ladypxy

正在学习 docker,

写了个小程序用来分析日志 可以接受参数来限制行数 ./log.py --limit=100 --log-file=apache.log

log.py 打包到 docker 里后,

docker run --mount source=/test,target=/app --log-file=apache.log --limit=100

就会提示 unknown flag: --log- See 'docker run --help'.

看网上写的是要编辑 DOCKFILE,按网上说的添加了

ENTRYPOINT ["python3", "log.py"] CMD [""]

似乎还是不行

6740 次点击
所在节点    Docker
18 条回复
x66
2019-11-18 10:07:24 +08:00
你可以把 pyton log.py --limit=100 --log-file=apache.log 写到一个 shell 文件里面,xxx.sh
然后直接执行 xxx.sh 程序不需要参数.
或者
ENTRYPOINT ["python", "log.py"]
CMD ["--limit=100 --log-file=apache.log"]
amrnxcdt
2019-11-18 10:24:28 +08:00
dockerfile 里面给 log.py 加个执行权限。然后工作目录定义到 log.py 的父目录
docker run imagesname log.py --limit=100 --log-file=apache.log
ladypxy
2019-11-18 10:30:25 +08:00
@x66 这些参数是可变的,需要在运行时输入,如果按照你这样建议的写到 CMD 里,是不是就直接 fix 了
x66
2019-11-18 10:32:58 +08:00
@ladypxy #3 你可以把变量通过 environment 在 docker run 的时候传进去,然后 shell 文件里面变量直接读取容器环境变量
ladypxy
2019-11-18 10:50:18 +08:00
@amrnxcdt 感谢回复。但是需求是参数是直接传送到 docker,而参数不包括 py 文件的名字
ladypxy
2019-11-18 10:54:09 +08:00
@x66 还有一个问题,py 文件在 docker 里,但是 py 要读取的日志在 host 上,这种情况下 dockerfile 怎么写?
x66
2019-11-18 10:57:13 +08:00
@ladypxy #6 docker volume 把主机的目录挂进去
XSG
2019-11-18 11:20:47 +08:00
你的 run 命令里面镜像参数都没有,怎么执行?
--log-file 被识别成 docker run 的参数了
luckyrayyy
2019-11-18 11:22:37 +08:00
1、写成配置文件
2、写成环境变量
yangyaofei
2019-11-18 12:45:10 +08:00
ARGV 也行貌似, 但是环境变量最好,在 docker-compose 里面用起来很爽
ladypxy
2019-11-18 13:29:04 +08:00
@luckyrayyy 这样写了貌似不行啊

ENV log-file=apache.log limit=100
ENTRYPOINT ["python3", ""log.py"]

运行就提示 docker run --mount source=/test,target=/app --log-file=apache.log --limit=100
unknown flag: --log-file
taolu
2019-11-18 13:41:10 +08:00
@ladypxy #11 docker run --mount source=/test,target=/app --env log-file=apache.log --env limit=100
ladypxy
2019-11-18 13:45:51 +08:00
@taolu 现在要求是不能加 --env
liukangxu
2019-11-18 14:05:03 +08:00
@ladypxy 为啥不能加 env ?这里的 env 是 container 内部生效的,不会对 host 产生影响
taolu
2019-11-18 14:12:23 +08:00
@ladypxy #13
ENTRYPOINT ["python3", "log.py"] CMD [""]
docker run --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100
ladypxy
2019-11-18 19:18:59 +08:00
@taolu 我最初就这么写的,会提示 unknow flag: --log-file
ladypxy
2019-11-18 19:21:59 +08:00
@taolu 准确的说是,我打包成叫 test
如果用
docker run test --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100, 会出现 log.py 里我设置的输入检测,提示 --log-file 没有输入

而如果用
docker run --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100 test,就会提示 unknow flag
taolu
2019-11-18 19:25:39 +08:00
@ladypxy #17 ${image_name} 请替换成 test
同时注意 docker run 的 Options 参数和容器 cmd 的区别

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

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

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

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

© 2021 V2EX