当前位置: 首页 > 面试题库 >

具有入口点变量扩展和CMD参数的Docker容器

习斌
2023-03-14
问题内容

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

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

因此,如果执行此容器时没有任何CMD覆盖并且secret作为MY_TOKEN变量,我希望

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中设置它。


问题答案:

使用/bin/sh -c "script"语法时,-c参数之后的所有内容都将成为脚本的参数。您可以使用/ bin /
sh脚本$0并将其$@作为/ bin / sh脚本的一部分:

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

请注意,您还可以将入口点更改为添加到运行的映像的exec /usr/bin/mycmd --token=$MY_TOKEN "$@"外壳程序脚本,然后使用docker的exec语法执行该外壳程序脚本:

ENTRYPOINT ["/entrypoint.sh"]


 类似资料:
  • 我想创建一个Docker映像,它充当一个可执行文件,用户将其作为环境变量传递一个令牌。该可执行文件包含用户应该通过dockers CMD传递的子命令(想想通过Env进行身份验证的git)。但是,Docker不会将CMD附加到入口点。我的Dockerfile的相关部分如下所示: 我希望 被处决。但是,如上所述,只有被执行,而CMD被忽略--无论我是在启动期间重写它还是在DockerFile中设置它。

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

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

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

  • 4.7. 容器扩展点 Spring框架的IoC容器被设计为可扩展的。通常我们并不需要子类化各个BeanFactory或ApplicationContext实现类。而通过plugin各种集成接口实现来进行扩展。下面几节专门描述这些不同的集成接口。 4.7.1. 用BeanPostProcessor定制bean 我们关注的第一个扩展点是BeanPostProcessor接口。它定义了几个回调方法,实现

  • 所以我试图写一个函数,它有一个泛型,它扩展了一个特定的对象,从而约束了它。接下来,我想将这个泛型与参数的定义一起使用,以生成一个新的“增强”参数。这一切都很好,但一旦我想引入一个默认值的参数TypeScript抱怨如下消息(这在操场上的一些不同的变化): 功能: 错误: 类型“{foo:string;}”不可分配给类型“T” 编译器警告我,我可能想使用foo,实际上我做到了。是简单地不可能以这种方