从正在运行的容器内部将文件复制到docker容器

时间:2016-10-28 16:30:09

标签: docker gitlab-ci

问题:如何将文件从主机复制到容器从内部正在运行的容器?

TL; TR

想法:我使用的是gitlab服务器,我想使用Gitlab-ci 1.测试提交
2.将所有源文件收集到.tar中 3.最后将它们部署到另一台服务器

当前状态:我的.gitlab-ci.yml中定义了前3个作业。 1和2工作正常,但rsync会导致主机密钥验证失败。"错误当然。这是我的"稀疏"我的.gitlab-ci.yml文件的版本:

image: alpine

stages:
  - test
  - package
  - deploy

test:
  stage: test
  script: bla bla testing bla bla

package:
  stage: package
  script: tar -cvf source.tar htdocs    

deploy:
  stage: deploy
  before_script:
  - apk update
  - apk add rsync openssh
  script:
   - rsync -vuar source.tar servadmin@123.123.123.123:/home/servadmin/transfer

除了这个.yml文件,我无权访问这些容器,所以我真的需要找到一种方法将公钥从主机复制到容器,但我必须从容器内部完成。或者我可以使用多跑者等等,但我是ci的新手,我现在可以避免这种情况

1 个答案:

答案 0 :(得分:1)

我找到了一个灵感来自上述评论的解决方法,我找到了一个我无法回忆的例子: 1. Dockerfile:

FROM alpine
COPY id_rsa /root/.ssh/
  1. .gitlab-ci.yml(仅针对“部署”工作进行更改):
  2. deploy:
      stage: deploy
        before_script:
          - apk update
          - apk add rsync openssh
          - mkdir -p /root/.ssh
          - eval "$(ssh-agent -s)"
          - echo "    IdentityFile ~/.ssh/id_rsa" >> /etc/ssh/ssh_config
    
          # install ssh-agent
          - 'which ssh-agent || ( apk update -y && apk add openssh-client -y )'
    
          # run ssh-agent
          - eval $(ssh-agent -s)
    
          #copy key to file
          - cp /root/.ssh/id_rsa ./key.file
          - chmod 600 ./key.file
    
          # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
          - ssh-add ./key.file
    
          # disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
          # WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
          - mkdir -p ~/.ssh
          - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    
          script:
           - rsync -arvvvce "ssh -o StrictHostKeyChecking=no" source.tar servadmin@123.123.123.123:/home/servadmin/transfer
    

    我猜-arvvvce "ssh -o StrictHostKeyChecking=no"可以替换为-vuar但未经过测试。