docker build --build-arg和docker-compose文件中的shell命令

时间:2019-03-04 18:02:22

标签: docker docker-compose

如何将下面的命令转换为docker-compose版本?

docker build -t xxx --build-arg SSH_PRV_KEY="$(cat ~/.ssh/id_rsa)" .

我在下面尝试了此块,但是它不起作用。请帮忙。谢谢。

xxx:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        SSH_PRV_KEY: "$(cat ~/.ssh/id_rsa)"

1 个答案:

答案 0 :(得分:0)

docker-compose不会像这样隐藏shell代码。您可以这样操作:

xxx:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        SSH_PRV_KEY

现在,在运行docker-compose之前,导出您的SSH_PRV_KEY环境变量:

export SSH_PRV_KEY="$(cat ~/.ssh/id_rsa)"
# now run docker-compose up as you normally do

然后SSH_PRV_KEY将具有正确的值。

您需要考虑的两件事:

  1. 如果您的id_rsa中有通行短语,则可能无法正常工作。
  2. SSH_PRV_KEY实际上可用于docker元数据,例如docker historyimages inspect。为了解决这个问题,您应该研究多阶段构建https://docs.docker.com/develop/develop-images/multistage-build/。在构建步骤中,您可以使用该键执行所需的任何操作。然后,在最终图像中,无需声明SSH_PRV_KEY,而只需复制前一图像的结果即可。一个更具体的示例,其中使用私钥安装依赖项

    FROM based as build
    ARG SSH_PRV_KEY
    RUN echo "$SSH_PRV_KEY" > ~/.ssh/id_rsa
    RUN npm install # this may need access to that rsa key
    
    FROM node
    COPY --from=builder node_modules node_modules
    

请注意,在第二张图片中,我们没有声明ARG,因此我们不会公开它。