从 docker 复制到主机内部 CI build

Copy from docker to host inside CI build

我想知道是否有可能以某种方式将 file/folder 从 docker 内部复制到主机,但复制本身是在 docker.

内部执行的

原因是,例如:

当我寻找解决方案时,我经常看到这个命令 docker cp <containerId>:/file/path/within/container /host/path/target 但是这是从 HOST 执行的。我想让整个过程自动化。

当然,可能的解决方案是不使用 docker,而是直接使用 SSH,这就是我现在正在做的,但这不是 IMO 的最佳选择。

这是我的 .gitlab-ci.yml 文件的示例,它将解释我想要实现的目标。

image: ubuntu:16.04

build:
    stage: build
    script:
        - apt-get update
        - apt-get upgrade -yy
        - apt-get install hugo -yy # Static site generator
        - hugo build # Build the website
        - cp -R ./build/* /var/www/my-website/ # Copy to the web root

这是我的跑步者配置

[[runners]]
  name = "DOCKER-TEST"
  url = "https://gitlab.com/ci"
  token = "{{token}}"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "ubuntu:16.04"
    privileged = true
    disable_cache = false
    volumes = ["/cache", "/home/stan:/builds/stanislavromanov/test-docker:rw"]
  [runners.cache]
    Insecure = false

使用 docker cp 之类的东西无法从容器复制到主机。你可以做的是将主机目录挂载到容器中,例如:

$ docker run ... -v /var/www/my-website:/website-on-host ...

并在 .gitlab-ci.yml 中调整您的 cp 命令如下:

cp -R ./build/* /website-on-host/ # Copy to the web root

你应该可以设置一个 Docker volume 容器中的目录挂载到主机的目录。

如果是 GitLab CI 跑步者,这可以在跑步者注册期间或稍后通过修改 /etc/gitlab-runner/config.toml 指定。示例:

[[runners]]
  url = "https://gitlab.com/ci"
  token = TOKEN
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "ubuntu:16.04"
    privileged = true
    disable_cache = false
    volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]

有关详细信息,请参阅 documentation