当前位置: 首页 > 知识库问答 >
问题:

带有entrypoint变量扩展和CMD参数的Docker容器

潘翊歌
2023-03-14

我想创建一个Docker映像,它充当一个可执行文件,用户将其作为环境变量传递一个令牌。该可执行文件包含用户应该通过dockers CMD传递的子命令(想想通过Env进行身份验证的git)。但是,Docker不会将CMD附加到入口点。我的Dockerfile的相关部分如下所示:

ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/mycmd --token=$MY_TOKEN"]
CMD ["pull", "stuff"]
mycmd --token=secret pull stuff
docker run -it -e MY_TOKEN=secret myimage push junk

我希望

mycmd --token=secret push junk

被处决。但是,如上所述,只有mycmd-token=secret被执行,而CMD被忽略--无论我是在启动期间重写它还是在DockerFile中设置它。

共有1个答案

伍心水
2023-03-14

使用/bin/sh-c“script”语法,-c参数之后的任何内容都将成为脚本的参数。您可以使用$0$@作为/bin/sh脚本的一部分访问它们:

ENTRYPOINT ["/bin/sh", "-c", "exec /usr/bin/mycmd --token=$MY_TOKEN $0 $@"]
CMD ["pull", "stuff"]

注意,您还可以将入口点更改为添加到映像中的shell脚本,该脚本运行exec/usr/bin/mycmd--token=$my_token“$@”并使用Docker的exec语法执行该shell脚本:

ENTRYPOINT ["/entrypoint.sh"]
 类似资料:
  • 问题内容: 我想创建一个充当可执行文件的Docker映像,用户为其传递令牌作为环境变量。可执行文件具有用户应通过dockers CMD传递的子命令(认为git通过Env进行身份验证)。但是,Docker不会将CMD附加到入口点。我的Dockerfile的相关部分如下所示: 因此,如果执行此容器时没有任何CMD覆盖并且作为MY_TOKEN变量,我希望 被执行。如果用户使用覆盖启动容器,例如 我希望

  • 问题内容: 我试图弄清楚如何在C扩展模块中具有一个函数的变量(也许有很多)参数。 阅读有关PyArg_ParseTuple的内容,您似乎必须知道要接受多少,一些强制性的和一些可选的,但都具有自己的变量。我希望PyArg_UnpackTuple能够处理此问题,但是当我尝试以似乎错误的方式使用它时,它似乎只会给我总线错误。 举个例子,将以下可能要放入扩展模块中的python代码(用C语言编写)。 这可

  • 在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数和。 所以我想到了使用扩展。我做了下面的工作, 然而,我曾考虑将分隔符作为参数传递,但在java中尝试使用“删除第二个参数…”时,它给了我一个错误 方法正确吗?能做到吗?

  • 问题内容: 可在https://hub.docker.com/r/tensorflow/tensorflow/上使用tensorflow docker容器,以使用其他库扩展此容器,例如我知道两个选项。 运行容器并运行 附加到构建此容器的 还有其他选择吗?类似于从dockerFile 创建容器,然后在该容器上安装。 阅读如何扩展现有的docker映像为此,创建具有这些内容的dockerFile?:

  • 问题内容: 我正在为命令行应用程序做前端。它很长。命令行与此类似: 在我将“模式”开关添加到其中之前,一切似乎都可以正常工作。“模式”开关从命令行执行。我尝试了几种组合方法,将参数拆分为既不执行也不执行的数组。我认为这与“模式”不相关,因为它前面没有,也不能有。 我究竟做错了什么? 编辑:我忘了提到我所能看到的是:调试器停止在不可编译的源代码上。我正在使用netbeans,它似乎无法打印出堆栈跟踪

  • ES6 的变量声明 ES6 中新增了 let 和 const 来定义变量: var:,ES5 和 ES6中,定义全局变量(是variable的简写)。 let:定义局部变量,替代 var。 const:定义常量(定义后,不可修改)。 var:全局变量 看下面的代码: { var a = 1; } console.log(a); //这里的 a,指的是