docker run 具有多个命令的入口点

2024-02-23

我怎样才能有一个入口点docker run它执行多个命令? 就像是:

docker run --entrypoint "echo 'hello' && echo 'world'" ... <image>

我尝试运行的图像已经在 Dockerfile 中设置了入口点,因此像下面这样的解决方案似乎不起作用,因为它看起来我的命令被忽略,并且只执行原始入口点

docker run ... <image> bash -c "echo 'hello' && echo 'world'"

在我的用例中我必须使用docker run命令。改变的解决方案Dockerfile不可接受,因为它不在我手中


作为风格点,如果您的图像具有CMD可以被覆盖。如果您只需要运行一个命令而无需进行初始设置,请将其设为CMD而不是ENTRYPOINT:

CMD ./some_command  # not ENTRYPOINT

如果您需要进行一些初始设置然后启动主命令,请执行ENTRYPOINT是一个以特殊指令结尾的 shell 脚本exec "$@". The CMD将作为参数传递给它,并且此行用该命令替换 shell 脚本。

#!/bin/sh
# entrypoint.sh
... do first time setup, run database migrations, set variables ...
exec "$@"
# Dockerfile
...
ENTRYPOINT ["./entrypoint.sh"] # MUST be JSON-array syntax
CMD ./some_command             # as before

如果你做了这些事情,那么你可以使用你的初始docker run形式。这将取代CMD但留下ENTRYPOINT完好无损的。在包装脚本的情况下,您的备用命令将作为exec "$@"命令,因此所有首次设置将首先完成。

# Assuming the image correctly honors the CMD
docker run ... \
  image-name \
  sh -c 'echo "foo is $FOO" && echo "bar is $BAR"'

如果你确实无法做到这一点,你可以覆盖docker run --entrypoint。这运行代替图像的入口点(如果你想要图像的入口点,你必须自己运行它),并且语法很尴尬:

# Run a shell command instead of the entrypoint
docker run ... \
  --entrypoint /bin/sh \
  image-name \
  -c 'echo "foo is $FOO" && echo "bar is $BAR"'

请注意,--entrypoint选项来了before图像名称及其参数来自after图像名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker run 具有多个命令的入口点 的相关文章

  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 在docker容器中运行Jenkins有什么优势

    我发现了很多关于如何运行你的博客Jenkins in Docker但没有人真正解释这样做的好处 这是我发现的唯一原因 使用 Docker 的理由 https twasink net 2016 08 01 setting up a jenki
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • Docker 绑定安装卷不会传播由角度“ngserve”执行监视的更改事件

    请按照下列步骤操作 定义 Dockerfile FROM node alpine RUN yarn global add angular cli RUN yarn global add node sass RUN mkdir volumes
  • Docker Toolbox Windows - 无效的卷规范

    EDIT 问题是COMPOSE CONVERT WINDOWS PATHS环境变量未设置 我尝试将其添加到Dockerfile并到一个 env文件但尚未设置 我无法设置任何新的环境变量 这就像从缓存的 Dockerfile 构建它一样 我之
  • wildfly-logstash 不将日志发送到logstash

    我正在使用 jboss keycloak 11 0 2 和 wildfly logstash https github com kifj wildfly logstash https github com kifj wildfly logs
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • docker 容器无法启动,因为现有的 pid 文件

    当我启动 docker 容器时 它会失败 因为现有的 pid 文件 root newhope sergio docker logs sharp shockley httpd pid 1 already running httpd pid 1
  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Nginx docker容器代理传递到另一个端口

    我想在 docker 容器中运行 Nginx 它监听端口 80 并且当 url 以 word 开头时 我希望它 proxy pass 到端口 8080api 我有一些网络应用程序侦听端口 8080 这在没有 docker 的情况下对我来说一
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 如何在 MacBook Pro 上的 Docker 容器内运行 tkinter?

    我正在尝试运行一个使用以下命令的 python GUI 应用程序tkinter我的 MacBook Pro 上的 docker 容器内的模块 所以我安装了XQuartz https www xquartz org 并跟随本教程 https
  • 无法初始化 NVML:几个小时后 Docker 中出现未知错误

    我遇到有趣而奇怪的问题 当我使用 GPU 启动 docker 容器时 它工作正常 并且我看到 docker 中的所有 GPU 然而 几个小时或几天后 我无法在docker中使用GPU 当我做nvidia smi在泊坞窗机器中 我看到这条消息
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 在 Ubuntu 18.04 上安装 Docker? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我检查了 Ubuntu 上 Docker 的文档页面 没有看到最近发布的 18 04 https docs docker com inst
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • 错误:无法满足的约束 - 在 php:7-fpm-alpine 上

    我正在考虑在 fpm alpine 容器上设置 laravel 遇到一个问题 下面的 Dockerfile 会产生一些错误 FROM php 7 fpm alpine install extensions needed for Larave

随机推荐