You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:25:56