在没有入口点的情况下运行命令

时间:2020-04-08 01:46:04

标签: docker

如何对容器运行命令并告诉docker不要运行入口点?例如

docker-compose run foo bash

以上将运行foo机器的入口点。如何在不修改Dockerfile的情况下临时阻止它?

2 个答案:

答案 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}}很有道理。

相关问题