0

我正在尝试使用 Concourse 管道来提取 git repo,然后从 git repo 中的 dockerfile 构建/推送 Docker 映像。dockerfile 中有一个 COPY 命令,用于将文件从 repo 复制到映像中。通常我会安装一个卷以便能够在构建时复制这些文件,但在 Concourse 中找不到这样做的方法。这是我正在尝试的:

# pipeline.yml
resources:  
  - name: git-repo
    type: git
    source:
      uri: <the-git-url>
      branch: master
      private_key: ((source-git-ssh-key))
  - name: my-image
    type: docker-image
    source:
      repository: gcr.io/path_to_image
      username: _json_key
      password: ((gcp-credential))

jobs:
  ...
      - get: git-repo
        trigger: true
      - put: my-image
        params:
          build: git-repo/compose



# dockerfile located at git-repo/compose/Dockerfile
FROM ...
...
# git-repo/scripts/run-script.sh
COPY scripts/run-script.sh /
...

如何在构建时将文件 git-repo/scripts/run-script.sh 复制到我的映像中?谢谢你。

4

2 回答 2

1

我不熟悉 Concourse,但作为 Docker 的规则,您只能COPY将包含在构建上下文中的内容放入镜像中(也就是说,它们位于构建目录或构建目录的子目录中)。从你的配置文件...

      - put: my-image
        params:
          build: git-repo/compose

看起来您的构建上下文是git-repo/compose. 由于您要包含的脚本位于该目录 ( )之外git-repo/scripts/run-script.sh,因此在构建过程中将不可用。

解决方案是重新组织您的git-repo. 例如,您可以:

  • scripts/目录移动到您的compose/目录中。
  • Dockerfile移出和移入compose/git-repo目录。
于 2019-11-21T12:06:34.807 回答
0

找到了办法。构建上下文被假定为基本目录(例如git-repo/compose在示例中)。结果,我想要复制的文件在我可用的目录之外。如果您的 Dockerfile 不在根目录中,dockerfile如果您仍想访问其余相同/更高级别的文件,则需要在参数中指定它。工作示例:

  - put: my-image
    params:
      build: git-repo
      dockerfile: git-repo/compose/Dockerfile
于 2019-11-21T14:57:26.797 回答