从 docker 复制到主机内部 CI build
Copy from docker to host inside CI build
我想知道是否有可能以某种方式将 file/folder 从 docker 内部复制到主机,但复制本身是在 docker.
内部执行的
原因是,例如:
- 将文件提交到 repo
- CI 开始
- Docker 安装依赖项,构建网站文件
- 网站文件从 docker 复制到 /var/www/my-website(主机)
当我寻找解决方案时,我经常看到这个命令 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。
我想知道是否有可能以某种方式将 file/folder 从 docker 内部复制到主机,但复制本身是在 docker.
内部执行的原因是,例如:
- 将文件提交到 repo
- CI 开始
- Docker 安装依赖项,构建网站文件
- 网站文件从 docker 复制到 /var/www/my-website(主机)
当我寻找解决方案时,我经常看到这个命令 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。