问题标签 [docker-entrypoint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
672 浏览

bash - Docker 运行找不到 ENTRYPOINT

我有以下内容Dockerfile

它构建得很好,但我无法执行它。来自post的解决方案是添加脚本的完整路径 ( ENTRYPOINT [ "/gen/script.sh" ]),这不起作用。

添加文件夹PATH也不起作用。这是为什么?

错误: docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"script.sh\": executable file not found in $PATH": unknown.

编辑:问题来自我用docker run --rm -v some/dir:/gen containerName.

0 投票
1 回答
8917 浏览

bash - 将 shell 或 bash 添加到 docker 映像(基于 Debian GNU/Linux 的 Distroless)

我想在我的图像中添加shellbash执行安装命令。

我已将 VM 上的 复制/bin/bash到我的图像上Dockerfile

但是当我执行 docker 命令时:

然后我收到以下错误:

/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

谢谢你的帮助

0 投票
1 回答
509 浏览

docker - 挂载 docker-entrypoint.sh 作为绑定卷

我有一个 docker 映像,我想在更新时使用和重用它。我想避免对图像本身进行任何更改,以半自动化提取最新图像并基于它部署容器的过程,而无需跳过额外的环节。

该过程的一部分涉及能够修改位于容器中的 docker-entrypoint.sh 文件

我的逻辑是将它作为绑定挂载点挂载到本地文件,我可以根据需要对其进行编辑 - 这样我就不必在每次发布对原始图像的更新时都更新图像并提交以更改docker-entrypoint.sh 文件。

我正在使用以下命令运行容器:

没有挂载它运行良好,但挂载失败,日志中只有这个:

知道可能出了什么问题吗?docker-entrypoint.sh 的本地副本是可执行的。提前致谢!

0 投票
2 回答
143 浏览

docker - Docker - 使用标签影响启动顺序

我的 Django 应用程序使用 Celery 定期处理任务。遗憾的是,这导致有 3 个 continer(App、Celery Worker、Celery Beat),每个都有自己的启动 shell 脚本,而不是 docker 入口点脚本。所以我的想法是有一个单一的入口点脚本,它能够处理我在 docker-compose.yml 中输入的标签。根据标签,容器应该以 App、Celery Beat 或 Celery Worker 实例启动。我以前从未做过这样的实现,但我问自己这是否可能,因为我在 trafik loadblancer 项目中看到了类似的东西,例如:

根据网络上的内容或关于如何实现这样的场景,或者是否有可能按照我在这里的想法,我没有找到任何好的材料。smb 之前是这样做的,还是我应该更好地使用 3 个单一的 shell 脚本,每个服务一个?

0 投票
2 回答
1983 浏览

node.js - 在 dockerfile 中运行 bash 脚本

我正在尝试在这样的 bash 脚本中运行多个 js 文件。这行不通。容器出现但不运行脚本。但是,当我 ssh 到容器并运行此脚本时,脚本运行良好并且节点服务出现。谁能告诉我我做错了什么?

Dockerfile

脚本如下

节点.sh

0 投票
0 回答
225 浏览

bash - bash脚本用exec切换用户

我想运行一个 docker 入口点来创建一个新用户,切换到该用户并销毁 root shell,因此它不能退出回

在命令行中这有效

如果我从中退出,容器会按预期停止。

但是,当我把它放在脚本中时,root shell 仍然存在并且可以退出

--- 注意 ---
对不起,我把事情搞混了。
当我将脚本用作 ENTRYPOINT 时,这实际上按预期工作

我没有将用户名放在 dockerfile 中,因为我希望它在 docker run 上分配,如

0 投票
0 回答
550 浏览

heroku - 带有容器堆栈和 ENTRYPOINT 指令的 Heroku 继续使用“/bin/sh -c”运行

我将首先介绍 Heroku 文档中有关其容器注册表和 Docker 部署运行时的相关部分。

Docker 命令和运行时部分指出:

  • ENTRYPOINT是可选的。如果不设置,/bin/sh -c将使用
    • CMD将始终由 shell 执行,以便您的进程可以使用配置变量;要执行单个二进制文件或使用没有 shell 的图像,请使用ENTRYPOINT

我想强调最后一句话(强调):

要执行单个二进制文件或使用没有 shell 的图像,请使用ENTRYPOINT

此外,在不支持的Dockerfile 命令部分。

  • SHELL- Docker 镜像的默认 shell 是,您可以根据需要/bin/sh覆盖。ENTRYPOINT

我对此的理解是,如果ENTRYPOINT指令存在于我的 Dockerfile 中,那么 Heroku 的容器堆栈将不会执行带有/bin/sh. 但显然我的理解是错误的,因为这似乎仍在发生。

下面是我的 Dockerfile 的示意图:

最终图像包含基础图像中的二进制/myprogram文件scratch。由于scratch没有/bin/sh,因此有必要覆盖它。根据他们的文档,这是通过ENTRYPOINT.

但是,当我将它部署到 Heroku 时,它似乎仍然使用 shell 执行。为了显示:

这意味着它最终正在执行:

这显然不是我想要的。但是这部分文档(我之前强调过)发生了什么?:

要执行单个二进制文件或使用没有 shell 的图像,请使用ENTRYPOINT

...

heroku.yml 文件如下所示:

我仍然对 shell 表单和 exec 表单有同样的问题。意思是,我也尝试使用看起来像这样的 heroku.yml 文件:

现在,我知道我可以通过将最终图像基于具有/bin/sh并删除ENTRYPOINT指令的图像来“正常工作”,并使用/myprogram. 我不需要使用从头开始,但我并且应该能够使用scratch,对吧?这是我多年来一直使用的在容器中运行静态链接二进制文件的方法,在其他平台上部署时我从未遇到过这样的问题。

那么我是否误解了他们的文档?我需要做什么才能摆脱这种/bin/sh恶作剧?

0 投票
0 回答
884 浏览

docker - Docker 入口点以交互模式与不同用户运行命令

我有一个安装了 docker 的自定义映像(docker-in-docker)。运行映像时,用户需要是$USERNAME(而不是 root)。但是,docker 服务需要 root 才能启动。

让 docker 以非 root 身份运行似乎过于复杂。所以我尝试su在入口点中使用,它可以工作,但它不是交互式的。

并且entrypoint.sh是:

我将其运行为:

或者,如果您不想接受 pulumi 的话:

知道如何正确地将 tty 传递给 su 命令吗?

0 投票
0 回答
1609 浏览

mongodb - docker-entrypoint-initdb.d 不执行脚本

我正在使用docker-compose version 1.25.5, build 8a1c60f6& Docker version 19.03.8, build afacb8b

我正在尝试使用 MongoDb 容器中的用户初始化数据库,docker-entrypoint-initdb.d但是容器启动时没有执行 js/脚本。

我知道/data/db它必须为空才能执行,所以我每次开始前都在删除它。但仍然没有执行。进入容器并手动执行mongo mongo-init.js工作。

不知道为什么它应该不工作。

码头工人-compose.yml:

Dockerfile:

2021 年 2 月 26 日:仍然没有解决方案

0 投票
1 回答
242 浏览

dockerfile - 在 Dockerfile 上使用 ENTRYPOINT 时找不到二进制文件

我正在玩 docker 和这个简单的图像

当我尝试运行时,docker build -t test . && docker run -it --rm test "go version"我得到了错误/bin/bash: go version: No such file or directory

如果没有 ENTRYPOINT 行,我运行它没有问题。

此外,我使用哪个 shell 似乎并不重要,只要线路在那里,它总是会失败。

谁能启发我它的行为是这样的吗?

仅供参考:使用 ENTRYPOINT 时容器内的 PATH 值不包括 /usr/local/go/bin (go exec 所在的位置)