将文件从 运行 容器内复制到 docker 容器
copy file to docker container from inside the running container
问题:如何从 容器 运行 容器中将文件从主机复制到容器?
TL;TR:
想法:我正在使用gitlab服务器,我想使用Gitlab-ci以便
1. 测试提交
2. 将所有源文件收集在 .tar
中
3. 最后将它们部署到另一台服务器
当前状态:我在我的 .gitlab-ci.yml 中定义了前 3 个作业。 1 和 2 工作得很好,但 rsync 当然会抛出 "Host key verification failed." 错误。这是我的 .gitlab-ci.yml 文件的 "thinned out" 版本:
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 文件,我无法访问这些容器,所以我真的需要找到一种方法将 public 密钥从主机复制到容器,但我必须从内部执行此操作容器。或者我可以使用多人跑步者等等,但我是 ci 的新手,我暂时可以避免这种情况
我找到了一个受上述评论启发的解决方法和一个我在某处不记得的例子:
1. Dockerfile:
FROM alpine
COPY id_rsa /root/.ssh/
- .gitlab-ci.yml(仅针对 'deploy' 作业更改):
。
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
但没测试过
问题:如何从 容器 运行 容器中将文件从主机复制到容器?
TL;TR:
想法:我正在使用gitlab服务器,我想使用Gitlab-ci以便
1. 测试提交
2. 将所有源文件收集在 .tar
中
3. 最后将它们部署到另一台服务器
当前状态:我在我的 .gitlab-ci.yml 中定义了前 3 个作业。 1 和 2 工作得很好,但 rsync 当然会抛出 "Host key verification failed." 错误。这是我的 .gitlab-ci.yml 文件的 "thinned out" 版本:
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 文件,我无法访问这些容器,所以我真的需要找到一种方法将 public 密钥从主机复制到容器,但我必须从内部执行此操作容器。或者我可以使用多人跑步者等等,但我是 ci 的新手,我暂时可以避免这种情况
我找到了一个受上述评论启发的解决方法和一个我在某处不记得的例子:
1. Dockerfile:
FROM alpine
COPY id_rsa /root/.ssh/
- .gitlab-ci.yml(仅针对 'deploy' 作业更改):
。
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
但没测试过