FROM alpine:3.5
CMD ["echo", "hello world"]
因此,在构建docker build -t hello .
之后,我可以通过调用docker run hello
来运行问候语,并获得输出hello world
。
现在让我们假设我希望运行ls
或sh
- 这很好。但我真正想要的是能够传递参数。例如ls -al
,甚至是tail -f /dev/null
,无需更改Dockerfile即可保持容器正常运行
我该怎么做呢?我对exec模式的尝试失败了...... docker run hello --cmd=["ls", "-al"]
答案 0 :(得分:2)
docker run
命令中的图像名称后面的任何内容都会成为CMD
的新值。所以你可以运行:
docker run hello ls -al
请注意,如果定义了ENTRYPOINT
,ENTRYPOINT
将收到CMD
的值作为args,而不是直接运行CMD
。因此,您可以将入口点定义为shell脚本,例如:
#!/bin/sh
echo "running the entrypoint code"
# if no args are passed, default to a /bin/sh shell
if [ $# -eq 0 ]; then
set -- /bin/sh
fi
# run the "CMD" with exec to replace the pid 1 of this shell script
exec "$@"
答案 1 :(得分:0)
Q值。但我真正想要的是能够传递参数。例如ls -al,甚至tail -f / dev / null以保持容器运行而不必更改Dockerfile
这是通过以下方式实现的:
docker run -d hello tail -f /dev/null
所以容器在后台运行,它允许你在其中执行任意命令:
docker exec <container-id> ls -la
并且,例如shell:
docker exec -it <container-id> bash
另外,我建议你@BMitch说。