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

默认Docker入口点

赵嘉纳
2023-03-14

我正在从另一个设置了特定入口点的图像创建一个图像。但是,我希望我的图像有一个默认的。如何重置入口点?

我尝试了以下Dockerfile:

FROM some-image
ENTRYPOINT ["/bin/sh", "-c"]

不幸的是,它不像默认的入口点那样工作,因为它需要引用命令。

docker run myimage ls -l /    # "-l /" arguments are ignored
file1 file2 file3             # files in current working directory

docker run myimage "ls -l /"  # works correctly

如何在不引用的情况下使用命令?

共有3个答案

红甫
2023-03-14

注意:注意入口点[]

正如moby/moby第3465期(重置从父映像继承的属性)中提到的,Brendon C.指出:

看起来像ENTRYPOINT[]ENTRYPOINT[“”]在不使用BuildKit时都会使每个生成上的缓存无效。

要演示的简单Dockerfile:

FROM jrottenberg/ffmpeg:4.3-alpine311 as base

ENTRYPOINT []

RUN echo "HERE!"

步骤2和3永远不会使用缓存。这是我的工作区:

FROM jrottenberg/ffmpeg:4.3-alpine311 as base

ENTRYPOINT ["/usr/bin/env"]

RUN echo "HERE!"
江高飞
2023-03-14

这和docker没有什么关系。尝试运行以下操作:

/bin/sh-c echofoo

/bin/sh-c“echo foo”

-c表示/bin/sh只拾取一个参数。因此,从您定义的入口点删除-c应该可以修复它。这比重置入口点更灵活;e、 g.您可以这样做来使用软件集合:

ENTRYPOINT[“scl”、“enable”、“devtoolset-4”、“--”、“bash”]

轩辕炎彬
2023-03-14

要禁用现有的入口点,请在docker文件中设置一个空数组

ENTRYPOINT []

然后,docker run的参数将像通常的shell形式CMD一样执行。

您的ENTRYPOINT["/bin/sh","-c"]需要引号字符串的原因是,如果没有引号,ls的参数将被传递到sh

未加引号会导致大量参数被发送到sh

"/bin/sh", "-c", "ls", "-l", "/"

引用允许将完整的命令(sh-c)作为一个参数传递给sh

"/bin/sh", "-c", "ls -l /"
 类似资料:
  • 我声明了一个该类型的变量,并初始化了所有属性 然后我稍后在一个init函数中为它们赋值实数 但我不喜欢在声明对象时为每个属性指定一组缺省空值,因为它们稍后将被设置为实值。我能告诉接口将我不提供的属性默认为null吗?什么会让我这么做: 而不会得到编译器错误。现在它告诉我 TS2322:类型“{}”不能分配给类型“ix”。类型“{}”中缺少属性“b”。

  • 安装舵机图 在同一命名空间部署入口 将服务的入口类型从LoadBalancer更改为NodePort,因为它不是以其他方式创建的。

  • 假设我有以下Dockerfile: 命令使得在容器启动时启动。我还希望能够在容器启动时使用命令启动。但是,根据文档,Dockerfile中必须只有一个

  • 默认情况下,Tomcat配置的默认端口是8080。这就是为什么所有已部署的Web应用程序都可以通过URL访问的原因:http://localhost:8080/yourapp。如果希望应该在80端口上运行,则需要将默认端口8080更改为80,这是HTTP连接器的默认端口。 要更改此端口,请打开并找到以下内容: 更改为以下内容: 修改后,您可以使用"http://localhost/"来访问您的应用

  • 本文向大家介绍Kotlin 与默认实现接口,包括了Kotlin 与默认实现接口的使用技巧和注意事项,需要的朋友参考一下 示例 Kotlin中的接口可以具有功能的默认实现: 实现此类接口的类将能够使用这些功能而无需重新实现 物产 默认实现也适用于属性获取器和设置器: 接口访问器实现不能使用后备字段 多种实现 当多个接口实现相同的功能,或者所有接口都定义一个或多个实现时,派生类需要手动解析正确的调用

  • 问题内容: 当我尝试运行时,我尝试了,但仍收到相同的消息。错误在哪里? 问题答案: 只需尝试检查已创建的机器(): 然后,您可以选择一个并尝试使用它。 如果没有,则可以先创建一个()。 对于OP: 由于错误消息是: 无法连接到Docker守护程序。docker守护程序是否在此主机上运行? “ Docker命令无法连接到docker daemon ” 的答案之一应该起作用: