问题标签 [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 投票
5 回答
1866 浏览

django - 如何防止每次启动 Docker 容器时运行我的脚本?

只有在构建我的 docker 容器时,我才会运行一个脚本(填充我的 MySql Docker 容器)。我正在运行以下 docker-compose.yml 文件,其中包含一个 Django 容器。

我有这个 web/Dockerfile

这些是我的 entrypoint.sh 文件的内容

问题是,当我反复运行“docker-compose up”时,entrypoint.sh 脚本正在使用它的命令运行。我希望这些命令仅在首次构建 docker 容器时运行,但它们似乎总是在容器恢复时运行。有什么方法可以调整我必须实现的目标吗?

0 投票
1 回答
26 浏览

docker - 如何从 dockerfile 管理文件

我在 docker 中有一个项目,我一直在努力从 dockerfile o docker-compose 文件中生成一些文件。

我有一个具有以下结构的 dockerized Django 项目。

为了这篇文章的目的,我只是写了一个通用结构来说明项目的情况以及我想做什么。

我试图做的是将数据库文件挂载为一个卷(类型:绑定)但没有用。我所做的是将文件夹 db 视为卷文件夹。直到这里一切正常。

我想要做的是在不存在时生成 db.sqlite3 文件,运行迁移并运行命令 python manage.py collectstatic --noinput。

我尝试创建一个入口点文件:

我尝试在 Dockerfile 中使用 ENTRYPOINT 和 CMD 语句调用此文件,但它们都不起作用。我还尝试从 Dockerfile 运行命令 touch,结果是一样的。

0 投票
1 回答
662 浏览

docker - Docker - 高山映像上的 WORKDIR 问题(多阶段构建)

我的 Dockerfile 有第二阶段:

如您所见,WORKDIR 设置为 /service

但是,如果您使用第一个入口点运行映像,您会得到:

/bin/sh: /main: not found

如果你使用第二个入口点运行,你会得到:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/main\": stat /main: no such file or directory": unknown.

注意:另一个有趣的点是COPY --from=builder ...我需要在其中设置 dest/service/否则我的文件会被复制到/目录中


根据文档

WORKDIR 指令为 Dockerfile 中任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。


任何想法?它真的与我或 Docker/alpine 有关吗?

0 投票
1 回答
1556 浏览

mongodb - Mongo Express 服务器监听 http://0.0.0.0:8081

我已经像上面那样编写了我的 docker-compose.yaml 文件。两者都在之后运行。但是,mongo-express 出现 403 禁止错误。当我检查 Visual Studio 代码中的视图日志时。我看到这个错误:

0 投票
3 回答
1054 浏览

docker - 通过 'docker run -e MY_VAR=value' 将 ENV var 传递给 entrypoint.sh?

我正在尝试通过 dockerfile 在运行时将 ENV vars 传递给我entrypoint.sh的 docker 容器的启动文件()。ENV 变量来自 azure devops 管道中的密钥库。

我似乎无法通过简单的docker run -e YUMMY_USER=$(MY_USER) -e YUMMY_PASSWORD=$(MY_PW) yummyAppImage. vars 用于登录授权服务。应该注意的是,来自密钥保管库的用户和密码都包含特殊字符。我的 dockerfile 看起来像这样:

我的 shell 脚本文件如下所示:

我试图在docker run命令中手动传递 ENV 变量,如下所示: docker run -e YUMMY_USER=exampleuser12983#$23 -e YUMMY_PASSWORD=examplepw(*&876 YummyAppImage但登录服务根本看不到参数。

也许我的语法不正确?任何帮助将不胜感激。谢谢!

0 投票
1 回答
874 浏览

docker-compose - 如何访问我的 docker-compose 文件中的 entrypoint.sh 值?

如何访问 docker-compose 文件中的 entrypoint.sh 值。我已经声明了 entrypoint.sh 中的所有值,如下所示。我需要访问我的 docker-compose 文件中的那些

我使用 docker-volumes 将 entrypoint.sh 脚本复制到 docker 容器中的 /usr/local/bin 目录。

entrypoint.sh 脚本

码头工人撰写文件

但是当我运行 docker-compose -d 我收到这条消息

0 投票
1 回答
3938 浏览

docker - 在入口点文件中导出环境变量不起作用?

我在将环境变量导出到 docker 入口点文件时遇到了一些问题。

这是我的 docker 文件内容:

在入口点文件中,我尝试运行命令“export TOKEN=$client_token”。然后,我使用该图像文件创建一个容器并运行“docker exec -it /bin/bash”命令并在容器中继续运行“set”命令以显示所有环境变量。所以,我找不到之前导出的 $TOKEN 变量。

如何将环境变量导出到入口点文件中?

0 投票
0 回答
3488 浏览

docker - 查看 docker 入口点输出

我正在配置要在容器启动后执行的入口点:

但是,entrypoint.shdocker-compose up.

唯一的输出是:

服务以代码 2 退出

容器被杀死所以我不能做docker logs <container_id>

我已经尝试使用docker events命令,但我没有看到任何与entrypoint.sh.

我知道入口点文件有错误,但我想查看执行的输出。

有任何想法吗?

0 投票
1 回答
151 浏览

java - 用于自我更新程序的 Docker entrypoint.sh

我想在 docker 容器中运行(java)应用程序。此应用程序具有更新功能。这会在启动时自动运行,并且可以从(Web)GUI 手动触发。更新下载新文件,然后运行新的可执行文件(使用新的 PID)并自行退出。

通常,我使用exec java -jar MyProgram.jar "$@"in entrypoint.sh。这将在发生更新时停止容器(因为 PID=1 退出)。

仅使用没有的行exec不能正确转发SIGTERM/ SIGKILLfor docker stop。虽然可以按照此处的program.sh说明转发这些信号,但我不知道在发生更新并产生新进程时如何跟踪 PID。

更新:由于我不是应用程序的开发人员,我正在寻找一种无需修改应用程序的解决方案。

更新 2:我发现该应用程序创建了一个MyProgram.pid文件,我可以读取该文件以在 a 的帮助下杀死它,trapprogram.sh上面链接中所述。

0 投票
1 回答
149 浏览

docker - Dockerfile 在入口点执行附加脚本

我正在为glats/alpine-lamplamp的开发工作构建一个容器。我想在容器加载后运行一些额外的 sql 命令(创建数据库和一些测试用户)。我创建了一个新脚本,作为 Dockerfile 的入口点运行,如下所示:init.sh

在我的init.sh我正在执行父容器的入口点脚本,但是由于这个脚本不会退出并且不会在后台运行,所以我的添加永远不会被执行。我尝试了几种调用父脚本的不同方法,包括source entry.sh/bin/sh /entry.sh(/entry.sh). 我也尝试使用 将其发送到后台/entry.sh &,但这也不起作用。

当父脚本不退出时,向容器添加其他入口点脚本的正确方法是什么?

编辑:我的初始化脚本