使用选项/参数覆盖默认的docker从主机运行

时间:2017-07-06 18:13:43

标签: docker

FROM alpine:3.5
CMD ["echo", "hello world"]

因此,在构建docker build -t hello .之后,我可以通过调用docker run hello来运行问候语,并获得输出hello world

现在让我们假设我希望运行lssh - 这很好。但我真正想要的是能够传递参数。例如ls -al,甚至是tail -f /dev/null,无需更改Dockerfile即可保持容器正常运行

我该怎么做呢?我对exec模式的尝试失败了...... docker run hello --cmd=["ls", "-al"]

2 个答案:

答案 0 :(得分:2)

docker run命令中的图像名称后面的任何内容都会成为CMD的新值。所以你可以运行:

docker run hello ls -al

请注意,如果定义了ENTRYPOINTENTRYPOINT将收到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说。