docker-shell编写args

pka*_*mol 4 docker dockerfile docker-compose

我想通过docker-compose使用我的私钥克隆私人git仓库的映像来构建。

组成大致如下:

   myservice:
     build:
      context: .
      args:
        RSA:  ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,以下情况也不起作用:

   myservice:
     build:
      context: .
      args:
        RSA: $(cat ~/.ssh/id_rsa)
Run Code Online (Sandbox Code Playgroud)

docker build命令可以正常工作,但是形式为

docker build --build-args RSA=$(cat ~/.ssh/id_rsa) -t myservice:latest
Run Code Online (Sandbox Code Playgroud)

yam*_*enk 6

您可以对docker-compose build使用相同的语法:

docker-compose build --build-args RSA=$(cat ~/.ssh/id_rsa)
Run Code Online (Sandbox Code Playgroud)

不幸的是,您不能在build up或start时使用build-args选项。因此,您需要先构建然后使用该--no-build选项运行

  • 应该是docker-compose build --build-arg RSA =“ $(cat〜/ .ssh / id_rsa)”` (4认同)

Eti*_*nne 6

在构建所有服务时可行的一种方法是将upSSH 密钥数据作为环境变量传递,如下所示:

env RSA=$(cat ~/.ssh/id_rsa) docker-compose build
Run Code Online (Sandbox Code Playgroud)

然后在撰写文件中设置构建参数,如下所示:

myservice:
 build:
  context: .
  args:
    RSA: |-
      ${RSA}
Run Code Online (Sandbox Code Playgroud)

  • “|” 在 YAML 中,启动一个保留换行符的多行字符串,“-”表示字符串末尾的所有换行符都应该被删除。检查 https://yaml-multiline.info/。对于默认值,语法为“${VARIABLE:-default}”(对于 2.1 撰写文件格式)。检查 https://docs.docker.com/compose/compose-file/#variable-substitution (2认同)