如何使用Ansible将整个目录复制到Docker容器中?
如何用Ansible将整个目录复制到Docker容器中?
我之前已经能通过Ansible的community.docker.docker_container_copy_into模块复制单个文件到容器:
- name: Copy SSH key into dev container community.docker.docker_container_copy_into: container: "{{ build_container_image_name }}" path: /tmp/build/ssh_keys/id_ed25519.pub container_path: /workspaces/project/keys/id_ed25519.pub mode: 0644 become_user: "{{ builder_user }}"
但现在需要复制整个目录,查了模块文档后发现该模块不支持目录复制,请问该怎么操作?
解决方案1:直接调用docker cp命令
Docker原生的docker cp命令支持目录复制,用Ansible的command模块直接调用即可,这是最简单的方案:
- name: 复制整个目录到Docker容器 command: docker cp /tmp/build/ssh_keys/ {{ build_container_image_name }}:/workspaces/project/keys/ become_user: "{{ builder_user }}"
注意:源路径末尾的
/表示复制目录内的所有内容到目标路径;如果不加/,则会把整个ssh_keys目录复制到目标路径下(即最终路径为/workspaces/project/keys/ssh_keys/),可根据需求调整。
解决方案2:用tar打包传输(适合复杂场景)
如果需要更精细的权限控制,或者主机/容器环境有特殊限制,可以用tar打包目录,再通过管道传到容器内解压:
- name: 在容器内提前创建目标目录(确保路径存在) community.docker.docker_container_exec: container: "{{ build_container_image_name }}" command: mkdir -p /workspaces/project/keys/ user: root - name: 打包并将目录传输到容器内解压 command: tar -c -C /tmp/build/ ssh_keys/ | docker exec -i {{ build_container_image_name }} tar -x -C /workspaces/project/ become_user: "{{ builder_user }}"
这种方法可以在解压时配合--owner、--group参数调整文件权限,适合需要指定容器内文件所属用户的场景。
内容的提问来源于stack exchange,提问作者PhilBot
相关产品推荐
相关产品推荐

