如何在Dockerfile或Shell中编辑yaml文件?

问题描述 投票:0回答:1

[在Dockerfile中,我从curl上传了一个配置文件,然后我需要对其进行一些编辑,这是一个示例结构:

client:
  ...
server:
  applicationConnectors:
  - type: http
    port: 8989
    # for security reasons bind to localhost
    bindHost: localhost
  requestLog:
      appenders: []
  adminConnectors:
  - type: http
    port: 8990
    bindHost: localhost

我需要编辑两个bindHost参数,希望能在docker build期间将它们的值作为参数传递,但似乎在Internet或文档中找不到任何东西。

docker dockerfile
1个回答
0
投票

您可以创建一个.env文件,然后将您想要的内容包含为变量,如下所示:

BINDHOST=localhost

然后在docker-compose.yml中写:

client:
  ...
server:
  applicationConnectors:
  - type: http
    port: 8989
    # for security reasons bind to localhost
    bindHost: ${BINDHOST}
  requestLog:
      appenders: []
  adminConnectors:
  - type: http
    port: 8990
    bindHost: ${BINDHOST}

在此处了解更多信息:https://docs.docker.com/compose/environment-variables/

希望这会有所帮助。


0
投票

但是我似乎在Internet或文档中都找不到任何东西。

您可以在Dockerfile中使用ARG指令,然后使用--build-arg将值传递给它。

Dockerfile ARG

ARG <name>[=<default value>]

ARG指令定义了一个变量,用户可以在构建时使用--build-arg =标志使用docker build命令将其传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则该构建会输出警告。

[Warning] One or more build-args [foo] were not consumed.

一个Dockerfile可能包含一个或多个ARG指令。例如,以下是有效的Dockerfile:

FROM busybox
ARG user1
ARG buildno

Docker Build Args

设置构建时变量(--build-arg)

您可以在Dockerfile中使用ENV指令来定义变量值。这些值保留在生成的映像中。但是,持久性通常不是您想要的。用户希望根据要在其上构建映像的主机来不同地指定变量。

一个很好的例子是http_proxy或用于拉取中间文件的源版本。 ARG指令允许Dockerfile作者使用--build-arg标志定义用户可以在构建时设置的值:

$ docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 --build-arg FTP_PROXY=http://40.50.60.5:4567 .

此标志允许您传递在Dockerfile的RUN指令中像常规环境变量一样访问的构建时变量。而且,这些值不会像ENV值那样保留在中间或最终图像中。您必须为每个构建参数添加--build-arg

使用此标志不会改变在构建过程中回显来自Dockerfile的ARG行时看到的输出。

有关使用ARG和ENV指令的详细信息,请参阅Dockerfile参考。

您也可以使用不带值的--build-arg标志,在这种情况下,本地环境中的值将传播到正在构建的Docker容器中:

$ export HTTP_PROXY=http://10.20.30.2:1234
$ docker build --build-arg HTTP_PROXY .
© www.soinside.com 2019 - 2024. All rights reserved.