问题标签 [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.
django - 如何防止每次启动 Docker 容器时运行我的脚本?
只有在构建我的 docker 容器时,我才会运行一个脚本(填充我的 MySql Docker 容器)。我正在运行以下 docker-compose.yml 文件,其中包含一个 Django 容器。
我有这个 web/Dockerfile
这些是我的 entrypoint.sh 文件的内容
问题是,当我反复运行“docker-compose up”时,entrypoint.sh 脚本正在使用它的命令运行。我希望这些命令仅在首次构建 docker 容器时运行,但它们似乎总是在容器恢复时运行。有什么方法可以调整我必须实现的目标吗?
docker - 如何从 dockerfile 管理文件
我在 docker 中有一个项目,我一直在努力从 dockerfile o docker-compose 文件中生成一些文件。
我有一个具有以下结构的 dockerized Django 项目。
为了这篇文章的目的,我只是写了一个通用结构来说明项目的情况以及我想做什么。
我试图做的是将数据库文件挂载为一个卷(类型:绑定)但没有用。我所做的是将文件夹 db 视为卷文件夹。直到这里一切正常。
我想要做的是在不存在时生成 db.sqlite3 文件,运行迁移并运行命令 python manage.py collectstatic --noinput。
我尝试创建一个入口点文件:
我尝试在 Dockerfile 中使用 ENTRYPOINT 和 CMD 语句调用此文件,但它们都不起作用。我还尝试从 Dockerfile 运行命令 touch,结果是一样的。
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 有关吗?
mongodb - Mongo Express 服务器监听 http://0.0.0.0:8081
我已经像上面那样编写了我的 docker-compose.yaml 文件。两者都在之后运行。但是,mongo-express 出现 403 禁止错误。当我检查 Visual Studio 代码中的视图日志时。我看到这个错误:
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
但登录服务根本看不到参数。
也许我的语法不正确?任何帮助将不胜感激。谢谢!
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 我收到这条消息
docker - 在入口点文件中导出环境变量不起作用?
我在将环境变量导出到 docker 入口点文件时遇到了一些问题。
这是我的 docker 文件内容:
在入口点文件中,我尝试运行命令“export TOKEN=$client_token”。然后,我使用该图像文件创建一个容器并运行“docker exec -it /bin/bash”命令并在容器中继续运行“set”命令以显示所有环境变量。所以,我找不到之前导出的 $TOKEN 变量。
如何将环境变量导出到入口点文件中?
docker - 查看 docker 入口点输出
我正在配置要在容器启动后执行的入口点:
但是,entrypoint.sh
当docker-compose up
.
唯一的输出是:
服务以代码 2 退出
容器被杀死所以我不能做docker logs <container_id>
我已经尝试使用docker events
命令,但我没有看到任何与entrypoint.sh
.
我知道入口点文件有错误,但我想查看执行的输出。
有任何想法吗?
java - 用于自我更新程序的 Docker entrypoint.sh
我想在 docker 容器中运行(java)应用程序。此应用程序具有更新功能。这会在启动时自动运行,并且可以从(Web)GUI 手动触发。更新下载新文件,然后运行新的可执行文件(使用新的 PID)并自行退出。
通常,我使用exec java -jar MyProgram.jar "$@"
in entrypoint.sh
。这将在发生更新时停止容器(因为 PID=1 退出)。
仅使用没有的行exec
不能正确转发SIGTERM
/ SIGKILL
for docker stop
。虽然可以按照此处的program.sh
说明转发这些信号,但我不知道在发生更新并产生新进程时如何跟踪 PID。
更新:由于我不是应用程序的开发人员,我正在寻找一种无需修改应用程序的解决方案。
更新 2:我发现该应用程序创建了一个MyProgram.pid
文件,我可以读取该文件以在 a 的帮助下杀死它,trap
如program.sh
上面链接中所述。
docker - Dockerfile 在入口点执行附加脚本
我正在为glats/alpine-lamplamp
的开发工作构建一个容器。我想在容器加载后运行一些额外的 sql 命令(创建数据库和一些测试用户)。我创建了一个新脚本,作为 Dockerfile 的入口点运行,如下所示:init.sh
在我的init.sh
我正在执行父容器的入口点脚本,但是由于这个脚本不会退出并且不会在后台运行,所以我的添加永远不会被执行。我尝试了几种调用父脚本的不同方法,包括source entry.sh
、/bin/sh /entry.sh
和(/entry.sh)
. 我也尝试使用 将其发送到后台/entry.sh &
,但这也不起作用。
当父脚本不退出时,向容器添加其他入口点脚本的正确方法是什么?
编辑:我的初始化脚本