如何对容器运行命令并告诉docker不要运行入口点?例如
docker-compose run foo bash
以上将运行foo机器的入口点。如何在不修改Dockerfile的情况下临时阻止它?
答案 0 :(得分:0)
docker-compose run --entrypoint=bash foo bash
它将运行嵌套的bash,有点没用,但是会提示您。
答案 1 :(得分:0)
如果控制图像,请考虑将整个默认命令行移至CMD
指令中。运行容器时使用Docker concatenates the ENTRYPOINT
and CMD
together,因此您可以在构建时自己进行操作。
# Bad: prevents operators from running any non-Python command
ENTRYPOINT ["python"]
CMD ["myapp.py"]
# Better: allows overriding command at runtime
CMD ["python", "myapp.py"]
从技术上讲,这是“修改Dockerfile”,但它不会更改容器的默认操作:如果未在entrypoint:
中指定command:
或docker-compose.yml
,则它将将运行完全相同的命令,但它也允许以您尝试的方式运行诸如调试shell之类的东西。
我倾向于在两种情况下保留ENTRYPOINT
。有一种常见的模式是使用ENTRYPOINT
进行一些首次设置( eg ,运行数据库迁移),然后使用exec "$@"
运行通过{{1}传递的内容}。这保留了CMD
的语义(您的CMD
仍将起作用,但将首先进行迁移)。如果我要构建docker-compose run bash
或其他“无损”图像,而实际上无法运行其他命令(根本没有FROM scratch
),则使图像中的单个内容成为{ {1}}很有道理。