提问人:overexchange 提问时间:10/18/2019 最后编辑:rokoverexchange 更新时间:10/18/2019 访问量:74307
entrypoint: “entrypoint.sh” - docker compose
entrypoint: "entrypoint.sh" - docker compose
问:
我的工作区中没有这样的文件。entrypoint.sh
但下面的说明指的是它:docker-compose.yml
builder:
build: ../../
dockerfile: docker/dev/Dockerfile
volumes:
- ../../target:/wheelhouse
volumes_from:
- cache
entrypoint: "entrypoint.sh"
command: ["pip", "wheel", "--non-index", "-f /build", "."]
哪里有../docker/dev/Dockerfile
# Set defaults for entrypoint and command string
ENTRYPOINT ["test.sh"]
CMD ["python", "manage.py", "test", "--noinput"]
实际作用是什么?entrypoint: "entrypoint.sh"
答:
ENTRYPOINT
是在运行 Docker 容器时执行的命令或脚本。
如果在 中指定,则会覆盖指定的 。entrypoint
docker-compose.yaml
ENTRYPOINT
Dockerfile
CMD
是作为参数传递给ENTRYPOINT
因此,如果您只是运行 ,它将执行dev/Dockerfile
test.sh python manage.py test --noinput
如果您像您所做的那样覆盖,它将执行CMD
docker-compose.yaml
test.sh pip wheel --non-index -f /build .
但是因为你也覆盖了你的,所以它将执行ENTRYPOINT
docker-compose.yaml
entrypoint.sh pip wheel --non-index -f /build .
所以基本上,是一个脚本,当你执行命令时,它将在你的容器内运行。entrypoint.sh
builder
docker-compose up
您也可以查看此答案以获取更多信息 Dockerfile 中的 CMD 和 ENTRYPOINT 有什么区别?
更新:如果基础映像具有 ,它将运行该入口点,但如果您使用自己的入口点进行覆盖,则容器将运行覆盖入口点。entrypoint.sh
如果您要覆盖基础映像的默认行为,那么您可以更改,否则您不需要从 docker-compose 中覆盖它。
entrypoint: “entrypoint.sh” 到底有什么作用?
这完全取决于 entrypoint.sh 中的脚本或命令,但很少有事情可以考虑。
ENTRYPOINT 指令允许您配置一个容器,该容器将 作为可执行文件运行。它看起来类似于 CMD,因为它还允许 指定带有参数的命令。区别在于 ENTRYPOINT 当 Docker 容器使用 命令行参数。(有一种方法可以忽略 ENTTRYPOINT,但它 你不太可能这样做。
简单来说,入口点可以是一个复杂的 bash 脚本,例如,在 mysql 入口点的情况下,它超过 200 个 LOC,它执行以下任务。
- 启动MySQL服务器
- 等待MySQL服务器启动
- 创建数据库
- 可以进行数据库迁移或数据库启动
CMD 无法完成如此复杂的任务,因为在 CMD 中您可以运行 bash,但让它工作会更令人头疼。此外,它还使 Dockerfile 变得简单,并将复杂的任务置于入口点。
当存在入口点时,传递给 CMD 的任何内容都将被视为入口点的参数。
在您的情况下,CMD 将作为参数传递,运行它的最佳方法是使用CMD ["python", "manage.py", "test", "--noinput"]
# set of command
#start long running process at the end that is passed from CMD
exec "$@"
最后,调用 exec shell 构造,使最终 给定的命令成为容器的 PID 1。 是一个 shell 变量 这意味着“所有的论点”,
$@
评论
entrypoint: "entrypoint.sh"
从 Dockerfile 覆盖。ENTRYPOINT ["test.sh"]
从文档中:
设置入口点都会覆盖在 带有 ENTRYPOINT Dockerfile 指令的服务映像,并清除 out 图像上的任何默认命令 - 这意味着如果有 CMD 指令,则忽略。
ENTRYPOINT ["test.sh"]
在描述 docker 镜像的 Dockerfile 中设置entrypoint: "entrypoint.sh"
在 docker-compose 文件中设置,该文件在引用 Dockerfile 时描述多容器环境。docker-compose build builder
将构建映像并将入口点设置为在 Dockerfile 中设置。ENTRYPOINT ["test.sh"]
docker-compose up builder
将启动容器,并在 docker-compose 文件中设置了入口点entrypoint.sh pip wheel --no-index '-f /build' .
评论
entrypoint.sh
FROM todobackendbase
entrypoint.sh
/usr/local/bin
评论