是否有一种方法可以在Dockerfile入口点中将命令作为参数执行?我正在创建一个映像,该映像应该自动运行mpirun
处理器的数量,即mpirun-np$(nproc)
或mpirun-np$(Getconf_nprocessors_onln)
。
ENTRYPOINT ["/tini", "--", "mpirun", "-np", "4"] # works
ENTRYPOINT ["/tini", "--", "mpirun", "-np", "$(nproc)"] # doesn't work
ENTRYPOINT ["/tini", "--", "mpirun", "-np", "$(getconf _NPROCESSORS_ONLN)"] # doesn't work
ENV processors 4
ENTRYPOINT ["/tini", "--", "mpirun", "-np", "$processors"] # doesn't work
有人设法得到这种工作流程吗?
这些可能不会奏效:参见第4783期
entrypoint
和cmd
是特殊的,因为它们不使用shell启动(因此您可以选择自己的shell),并且iirc也对它们进行了转义。
与shell表单不同,exec
表单不调用命令shell。
这意味着不进行正常的shell处理。
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
例如,请参见vromero/activemq-artemis-docker
的Dockerfile,该文件运行脚本docker-entrypoint.sh
.
为了允许cmd
也运行,脚本以:
exec "$@"
(它将执行后面的任何参数,或者来自cmd
指令,或者来自Docker run
参数)
吉利在评论中补充道:
我在DockerFile中使用:
COPY docker-entrypoint.sh
ENTRYPOINT ["/tini", "--", "/docker-entrypoint.sh"]
在entrypoint脚本中:
#!/bin/bash
exec mpirun -np $(nproc) "$@"
假设我有以下Dockerfile: 命令使得在容器启动时启动。我还希望能够在容器启动时使用命令启动。但是,根据文档,Dockerfile中必须只有一个
我正在从另一个设置了特定入口点的图像创建一个图像。但是,我希望我的图像有一个默认的。如何重置入口点? 我尝试了以下Dockerfile: 不幸的是,它不像默认的入口点那样工作,因为它需要引用命令。 如何在不引用的情况下使用命令?
我有以下DockerFile: 这是什么意思:switch的值丢失了,我如何运行它?谢谢你的帮助 更新 请参阅此处:docker ASP.NET核心容器在mysql容器之后启动以获取更多信息。很抱歉有类似的第二个线程。请删除此线程
我的Dockerfile有一个在EntryPoint上运行的脚本。容器计划用我的代码所在的卷挂载运行,一旦容器用卷挂载运行,它需要运行几个命令。 docker run-itd-v/home/user/directory:/my-mount-dir build-container 注意:startup-script.sh包含应该在挂载的目录文件上运行的命令。
我试图让我的docker db容器在创建时自动用数据集填充数据库。根据mariadb留档,卷中有一个文件夹可用于此目的。 我设置了我的文件来镜像我在StackOverflow上找到的示例,但是仍然无法执行我的SQL脚本。以下是我的文件的相关部分: 在文件,我有一个文件: 在每次测试迭代之前,我会清理所有旧的/缓存的Docker内容: 我发现这实际上并没有删除数据库卷。运行仍会显示过去存在的卷 Do
以下是我的项目结构的一部分: 我有init.sql脚本,它应该创建用户、数据库和表(用户和数据库与docker-compose.yml文件中的相同) 但当我查看docker entrypoint initdb.d文件夹时,它是空的(没有init.sql文件)。我使用以下命令: docker exec最新发布的\u postgres-passport\u 1 ls-l docker入口点initdb