从docker复制到CI内部的主机

我想知道是否有可能以某种方式复制文件/文件夹从docker到主机,但复制本身是在docker执行forms。

原因是,例如:

  • 提交文件回购
  • CI踢进
  • Docker安装依赖关系,build立网站文件
  • 网站文件从docker复制到/ var / www / my-website(主机)

当我正在寻找一个解决scheme,我已经看到这个命令很多docker cp <containerId>:/file/path/within/container /host/path/target但是这是从HOST执行。 我想让整个过程自动化。

当然可能的解决scheme是不使用docker工具,而是直接使用SSH,这就是我现在正在做的事情,但这不是IMO的最佳select。

这里是我的.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 

这是我的跑步者configuration

 [[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 卷 ,将容器中的一个目录挂载到主机的一个目录中。

在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"] 

请参阅文档了解更多信息。

使用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