community.docker.docker_container 模块 – 管理 Docker 容器
注意
此模块是 community.docker 集合 (版本 4.1.0) 的一部分。
如果您正在使用 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list。
要安装它,请使用:ansible-galaxy collection install community.docker。您需要其他要求才能使用此模块,有关详细信息,请参阅 需求。
要在 playbook 中使用它,请指定:community.docker.docker_container。
概要
- 管理 Docker 容器的生命周期。 
- 支持检查模式。使用 - --check和- --diff运行以查看配置差异和要执行的操作列表。
需求
执行此模块的主机需要以下需求。
- Docker API >= 1.25 
- backports.ssl_match_hostname (在 Python 2 上使用 TLS 时) 
- paramiko (在使用 SSH 且 - use_ssh_client=false时)
- pyOpenSSL (在使用 TLS 时) 
- pywin32 (在 Windows 32 上使用命名管道时) 
- requests 
参数
| 参数 | 注释 | 
|---|---|
| Docker 主机上运行的 Docker API 版本。 默认为此集合和 docker 守护程序支持的最新 API 版本。 如果任务中未指定此值,则将改为使用环境变量  默认值:  | |
| 块 IO(相对权重),介于 10 和 1000 之间。 | |
| 通过提供 CA 证书文件的路径来执行服务器验证时使用 CA 证书。 如果任务中未指定此值,并且设置了环境变量  此选项以前称为  | |
| 要从容器中删除的功能列表。 | |
| 要添加到容器的功能列表。 这等效于  | |
| 指定容器的父 cgroup。 | |
| 指定容器的 cgroup 命名空间模式。 Docker CLI 将此简称为  选项 
 | |
| 客户端 TLS 证书文件的路径。 如果任务中未指定值且环境变量 | |
| 客户端 TLS 密钥文件的路径。 如果任务中未指定值且环境变量 | |
| 对于 此外,将 如果将其设置为 如果将其设置为 选项 
 | |
| 允许指定如何将现有容器的属性与模块选项进行比较,以确定是否应重新创建/更新容器。 只能指定与 Docker 守护程序处理的容器状态相对应的选项,以及 必须是一个字典,为一个选项指定 如果指定了 
 可以使用通配符选项 有关详细信息,请参阅示例。 | |
| 在此模块的早期版本中,各种模块选项曾经具有默认值。这会导致使用这些选项的不同值的容器出现问题。 现在的默认值为 这会影响 选项 
 | |
| 限制 CPU CFS(完全公平调度程序)周期。 有关更易于使用的替代方法,请参阅 | |
| 限制 CPU CFS(完全公平调度程序)配额。 有关更易于使用的替代方法,请参阅 | |
| CPU份额(相对权重)。 | |
| 指定容器可以使用多少可用 CPU 资源。 值为 | |
| 允许执行的 CPU。 例如 | |
| 允许执行的内存节点 (MEM) | |
| 调试模式 选项 
 | |
| 定义要使用的默认主机 IP。 必须是空字符串、IPv4 地址或 IPv6 地址。 对于 Docker 20.10.2 或更高版本,应将其设置为空字符串 ( 默认情况下,模块将尝试从 | |
| 启用分离模式以使容器在后台运行。 如果禁用,则任务将反映容器运行的状态(如果命令失败则失败)。 如果 选项 
 | |
| 要应用于容器的 cgroup 规则列表。 | |
| 设备路径和从设备读取速率(每秒字节数)的列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制,格式为 数字是正整数。单位可以是 省略单位默认为字节。 | |
| 设备和从设备读取速率(每秒 I/O 次数)的列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制。 必须是正整数。 | |
| 允许请求其他资源,例如 GPU。 | |
| 字符串列表的列表,用于请求功能。 顶级列表条目通过 OR 组合,对于每个列表条目,它包含的列表中的条目通过 AND 组合。 驱动程序尝试满足其中一个子列表。 可在https://github.com/NVIDIA/nvidia-container-runtime找到 | |
| 要请求的设备数量。 设置为 | |
| 设备 ID 列表。 | |
| 要为此设备使用的驱动程序。 | |
| 特定于驱动程序的选项。 | |
| 设备和写入速率(每秒字节数)到设备的列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制,格式为 数字是正整数。单位可以是 省略单位默认为字节。 | |
| 设备列表及其写入速率(每秒 I/O 次数)。 | |
| 容器中的设备路径。 | |
| 设备读取限制。 必须是正整数。 | |
| 要添加到容器的主机设备绑定列表。 每个绑定都是一个以  | |
| DNS 选项列表。 | |
| 自定义 DNS 搜索域列表。 | |
| 自定义 DNS 服务器列表。 | |
| 用于连接到 Docker API 的 URL 或 Unix 套接字路径。要连接到远程主机,请提供 TCP 连接字符串。例如, 如果任务中未指定此值,则将使用环境变量  默认值:  | |
| 容器域名。 | |
| 覆盖镜像默认  有关字符串和列表的处理方式差异,请参阅 | |
| 键值对字典。 YAML 解析器可能会将某些值解析为数字、布尔值或其他类型,为了避免数据丢失,必须用引号引起来(例如  请注意,如果您使用 Jinja2 模板传递值,例如  | |
| 主机到 IP 映射的字典,其中每个主机名都是字典中的一个键。每个主机名都将添加到容器的  除了 IP 地址,还可以使用特殊值  | |
| 其他容器端口列表,通知 Docker 容器在运行时侦听指定的网络端口。 如果端口已使用 Dockerfile 中的  | |
| 停止正在运行的容器时使用 kill 命令。 选项 
 | |
| 容器进程将以其运行的其他组名和/或 ID 列表。 | |
| 配置运行的检查,以确定此服务的容器是否“健康”。 有关运行状况检查的工作原理的详细信息,请参阅 HEALTHCHECK Dockerfile 指令 的文档。 
 另请参阅  | |
| 运行检查之间的时间。 Docker 守护程序使用的默认值为  | |
| 需要报告不健康的连续失败次数。 Docker 守护程序使用的默认值为  | |
| 启动期间健康检查之间的时间。此选项需要 Docker Engine 版本 25.0 或更高版本。 Docker 守护程序使用的默认值为  | |
| 容器在启动健康检查倒计时之前进行初始化的启动期间。 Docker 守护程序使用的默认值为  | |
| 要运行的检查健康的命令。 必须是字符串或列表。如果是列表,则第一项必须是  | |
| 如果设置为  如果设置为  选项 
 | |
| 允许一次检查运行的最长时间。 Docker 守护程序使用的默认值为  | |
| 如果  超时以秒为单位指定。默认值  将其设置为 0 或负值以无限期等待。请注意,根据容器的不同,这可能会导致模块无法终止。 默认值:  | |
| 容器的主机名。 | |
| 用于创建容器的存储库路径和标签。如果找不到镜像或 pull 为 true,则将从注册表中拉取镜像。如果未包含标签,则将使用  也可以是镜像 ID。如果是这种情况,则假定镜像在本地可用。 | |
| 如何处理从镜像继承但未显式设置的标签。 当  当  警告:除非在  选项 
 | |
| 确定如果镜像匹配,但容器配置中的镜像名称与提供给模块的镜像名称不匹配时,模块的行为。 如果在  如果设置为  如果设置为  在 community.docker 4.0.0 中,默认值从  选项 
 | |
| 在容器内运行一个 init 进程,用于转发信号和回收进程。 如果  选项 
 | |
| 即使未附加,在启动容器后也保持 stdin 打开。 如果  选项 
 | |
| 设置容器的 IPC 模式。 可以是  | |
| 保留与已删除容器关联的匿名卷。 选项 
 | |
| 内核内存限制,格式为  省略单位默认为字节。 | |
| 覆盖用于杀死正在运行的容器的默认信号。 | |
| 键值对字典。 | |
| 链接容器的名称别名列表,格式为  设置此选项将强制容器重新启动。 | |
| 指定日志驱动程序。Docker 默认使用  有关可能的选项,请参阅 Docker 日志配置文档。 | |
| 选择  详情请参阅 https://docs.dockerd.com.cn/engine/admin/logging/overview/。 即使使用默认的  | |
| 容器 MAC 地址(例如, 请注意,自 Docker API 版本 1.44 起,全局容器范围的 MAC 地址已弃用且不再使用。 | |
| 内存限制,格式为  省略单位默认为字节。 如果  | |
| 内存软限制,格式为  省略单位默认为字节。 | |
| 总内存限制(内存 + 交换分区)格式为  省略单位默认为字节。 | |
| 调整容器的内存交换行为。接受 0 到 100 之间的整数。 如果未设置,则如果容器存在,该值将保持不变;如果容器被(重新)创建,则将继承自主机。 | |
| 要添加到容器的挂载点的规范。比  | |
| 挂载点的一致性要求。 选项 
 | |
| 卷的用户定义名称和标签。仅对  | |
| 如果卷应该填充目标数据,则为 False。仅对  默认值为  选项 
 | |
| 传播模式。仅对  选项 
 | |
| 挂载点是否应为只读。 选项 
 | |
| 容器内的路径。 | |
| tmpfs 挂载点的权限模式。 | |
| tmpfs 挂载点的大小,以字节为单位,格式为 <number>[<unit>]。 数字是正整数。单位可以是 省略单位默认为字节。 | |
| 挂载类型。 请注意, 选项 
 | |
| 指定卷驱动程序。仅对  详情请见 此处。 | |
| 选定 volume_driver 的特定选项字典。详情请见 此处。 | |
| 为新的容器分配名称或匹配现有容器。 在识别现有容器时,名称可以是名称或长或短的容器 ID。 | |
| 将容器连接到网络。选项包括  从 community.docker 2.0.0 开始,如果  | |
| 容器所属的网络列表。 有关数据结构和用法的示例,请参见下面的示例。 要将容器从一个或多个网络中移除,请在  如果  | |
| 此网络中此容器的别名列表。这些名称可用于网络以访问此容器。 | |
| 此网络中容器的 IPv4 地址。 | |
| 此网络中容器的 IPv6 地址。 | |
| 要链接到的容器列表。 | |
| 端点 MAC 地址(例如, 这仅适用于 Docker API 版本 1.44 及更高版本。 请注意,当创建后将容器附加到网络时,Docker Daemon 至少在某些情况下当前会忽略这一点。在创建时传递时,这似乎效果更好。 | |
| 网络名称。 | |
| 如果  当 选项 
 | |
| 是否为容器禁用OOM Killer。 选项 
 | |
| 一个整数值,包含赋予容器的分数,用于调整OOM killer的优先级。 | |
| 与started状态一起使用,暂停容器内的运行进程。 如果  选项 
 | |
| 设置容器的PID命名空间模式。 | |
| 设置容器的PID限制。接受整数值。 设置 | |
| 容器的平台,格式为 请注意,从community.docker 3.5.0版本开始,该模块使用镜像的元数据和Docker守护进程的信息来规范化平台字符串,这与Docker本身的做法类似。如果您注意到幂等性问题,请在community.docker GitHub仓库中创建一个问题。对于较旧的community.docker版本,您可以使用带有 | |
| 要从容器发布到主机的端口列表。 使用docker CLI语法: 可以使用端口范围作为源端口和目标端口。如果指定了长度不同的两个范围,则将使用较短的范围。从community.general 0.2.0版本开始,如果源端口范围的长度为1,则端口不会分配给目标范围的第一个端口,而是分配给该范围内的可用端口。这与 绑定地址必须是IPv4或IPv6地址。不允许使用主机名。这与 如果提供了 在早期版本的此模块中允许使用值 | |
| 如果设置为 如果设置为 如果设置为 注意:仅当按名称指定时才会拉取镜像。如果镜像指定为镜像ID(哈希值),则无法拉取,并且会忽略此选项。 注意:值 选项 
 | |
| 允许在检查模式下调整 由于Docker守护进程不提供任何功能来测试拉取是否会导致镜像更改,因此模块默认情况下会像 如果设置为 如果设置为 选项 
 | |
| 与present和started状态一起使用,强制重新创建现有容器。 选项 
 | |
| 删除现有容器时,docker守护进程API调用在容器被安排删除后结束。删除通常非常快,但在高I/O负载下,删除可能需要更长时间。默认情况下,模块将等待容器被删除后再尝试(重新)创建它,无论需要多长时间。 通过设置此选项,模块最多将等待这么多秒来删除容器。如果这么多秒后容器仍处于删除阶段,则模块将失败。 | |
| 与started状态一起使用,强制停止并重新启动匹配的容器。 选项 
 | |
| 容器重启策略。 在 选项 
 | |
| 与restart policy一起使用,控制最大重启尝试次数。 | |
| 用于容器的运行时。 | |
| 安全选项列表,格式为 | |
| 
 省略单位默认为字节。如果完全省略大小,Docker守护进程将使用 | |
| 
 
 
 
 
 要控制在比较配置时将考虑哪些内容,请参见  使用  如果容器需要停止以进行重新创建,或者因为  使用  选项 
 | |
| 覆盖用于停止容器的默认信号。 | |
| 在发送  当容器停止时,将用作停止容器的超时。如果容器具有自定义  | |
| 此容器的存储驱动程序选项,作为键值映射。 | |
| 键值对字典。 | |
| 通过使用 TLS 连接到 API,而不验证 Docker 主机服务器的真实性来保护连接。请注意,如果  如果任务中未指定该值,则将改为使用环境变量  选项 
 | |
| 验证 Docker 主机服务器的真实性时,提供服务器的预期名称。 如果任务中未指定该值,则将改为使用环境变量  请注意,此选项在旧版本中具有默认值  | |
| 挂载 tmpfs 目录。 | |
| ulimit 选项列表。ulimit 指定为  | |
| 对于 SSH 传输,使用  选项 
 | |
| 设置使用的用户名或 UID,以及可选的指定命令的组名或 GID。 可以采用以下形式: | |
| 设置容器的用户命名空间模式。目前,唯一有效的值是  | |
| 设置容器的 UTS 命名空间模式。 | |
| 通过使用 TLS 连接到 API 并验证 Docker 主机服务器的真实性来保护连接。 如果任务中未指定该值,则将改为使用环境变量  选项 
 | |
| 容器卷驱动程序。 | |
| 要在容器内挂载的卷列表。 使用 docker CLI 风格的语法: 挂载模式可以是各种模式的逗号分隔列表,例如  SELinux 主机还可以额外使用  请注意,Ansible 2.7 及更早版本仅支持一种模式,该模式必须是  | |
| 要从中获取卷的容器名称或 ID 列表。 | |
| 工作目录的路径。 | 
属性
| 属性 | 支持 | 描述 | 
|---|---|---|
| 操作组: community.docker.docker、docker | 在  | |
| 可以在  | ||
| 支持:完全 | 在差异模式下,将返回关于更改内容(或可能需要在 | 
注释
注意
- 对于大多数配置更改,需要重新创建容器。这意味着必须销毁现有容器并创建一个新容器。这可能会导致意外的数据丢失和停机。您可以使用 - comparisons选项来防止这种情况。
- 如果模块需要重新创建容器,它将只使用提供给模块的选项来创建新容器(除了 - image)。因此,始终指定与容器相关的所有选项。
- 当 - restart设置为- true时,只有在未检测到配置更改的情况下,模块才会重新启动容器。
- 通过为每个任务提供参数或定义环境变量来连接到Docker守护进程。您可以定义 - DOCKER_HOST,- DOCKER_TLS_HOSTNAME,- DOCKER_API_VERSION,- DOCKER_CERT_PATH,- DOCKER_TLS,- DOCKER_TLS_VERIFY和- DOCKER_TIMEOUT。如果您正在使用docker machine,请运行产品附带的设置环境的脚本。它将为您设置这些变量。有关更多详细信息,请参见https://docs.dockerd.com.cn/machine/reference/env/。
- 此模块**不**使用Docker SDK for Python与Docker守护进程通信。它使用源自Docker SDK或Python的代码,这些代码包含在此集合中。 
示例
- name: Create a data container
  community.docker.docker_container:
    name: mydata
    image: busybox
    volumes:
      - /data
- name: Re-create a redis container
  community.docker.docker_container:
    name: myredis
    image: redis
    command: redis-server --appendonly yes
    state: present
    recreate: true
    exposed_ports:
      - 6379
    volumes_from:
      - mydata
- name: Restart a container
  community.docker.docker_container:
    name: myapplication
    image: someuser/appimage
    state: started
    restart: true
    links:
     - "myredis:aliasedredis"
    devices:
     - "/dev/sda:/dev/xvda:rwm"
    ports:
     # Publish container port 9000 as host port 8080
     - "8080:9000"
     # Publish container UDP port 9001 as host port 8081 on interface 127.0.0.1
     - "127.0.0.1:8081:9001/udp"
     # Publish container port 9002 as a random host port
     - "9002"
     # Publish container port 9003 as a free host port in range 8000-8100
     # (the host port will be selected by the Docker daemon)
     - "8000-8100:9003"
     # Publish container ports 9010-9020 to host ports 7000-7010
     - "7000-7010:9010-9020"
    env:
        SECRET_KEY: "ssssh"
        # Values which might be parsed as numbers, booleans or other types by the YAML parser need to be quoted
        BOOLEAN_KEY: "yes"
- name: Container present
  community.docker.docker_container:
    name: mycontainer
    state: present
    image: ubuntu:14.04
    command: sleep infinity
- name: Stop a container
  community.docker.docker_container:
    name: mycontainer
    state: stopped
- name: Start 4 load-balanced containers
  community.docker.docker_container:
    name: "container{{ item }}"
    recreate: true
    image: someuser/anotherappimage
    command: sleep 1d
  with_sequence: count=4
- name: Remove container
  community.docker.docker_container:
    name: ohno
    state: absent
- name: Syslogging output
  community.docker.docker_container:
    name: myservice
    image: busybox
    log_driver: syslog
    log_options:
      syslog-address: tcp://my-syslog-server:514
      syslog-facility: daemon
      # NOTE: in Docker 1.13+ the "syslog-tag" option was renamed to "tag" for
      # older docker installs, use "syslog-tag" instead
      tag: myservice
- name: Create db container and connect to network
  community.docker.docker_container:
    name: db_test
    image: "postgres:latest"
    networks:
      - name: "{{ docker_network_name }}"
- name: Start container, connect to network and link
  community.docker.docker_container:
    name: sleeper
    image: ubuntu:14.04
    networks:
      - name: TestingNet
        ipv4_address: "172.16.1.100"
        aliases:
          - sleepyzz
        links:
          - db_test:db
      - name: TestingNet2
- name: Start a container with a command
  community.docker.docker_container:
    name: sleepy
    image: ubuntu:14.04
    command: ["sleep", "infinity"]
- name: Add container to networks
  community.docker.docker_container:
    name: sleepy
    networks:
      - name: TestingNet
        ipv4_address: 172.16.1.18
        links:
          - sleeper
      - name: TestingNet2
        ipv4_address: 172.16.10.20
- name: Update network with aliases
  community.docker.docker_container:
    name: sleepy
    networks:
      - name: TestingNet
        aliases:
          - sleepyz
          - zzzz
- name: Remove container from one network
  community.docker.docker_container:
    name: sleepy
    networks:
      - name: TestingNet2
    comparisons:
      networks: strict
- name: Remove container from all networks
  community.docker.docker_container:
    name: sleepy
    comparisons:
      networks: strict
- name: Start a container and use an env file
  community.docker.docker_container:
    name: agent
    image: jenkinsci/ssh-slave
    env_file: /var/tmp/jenkins/agent.env
- name: Create a container with limited capabilities
  community.docker.docker_container:
    name: sleepy
    image: ubuntu:16.04
    command: sleep infinity
    capabilities:
      - sys_time
    cap_drop:
      - all
- name: Finer container restart/update control
  community.docker.docker_container:
    name: test
    image: ubuntu:18.04
    env:
      arg1: "true"
      arg2: "whatever"
    volumes:
      - /tmp:/tmp
    comparisons:
      image: ignore   # do not restart containers with older versions of the image
      env: strict   # we want precisely this environment
      volumes: allow_more_present   # if there are more volumes, that's ok, as long as `/tmp:/tmp` is there
- name: Finer container restart/update control II
  community.docker.docker_container:
    name: test
    image: ubuntu:18.04
    env:
      arg1: "true"
      arg2: "whatever"
    comparisons:
      '*': ignore  # by default, ignore *all* options (including image)
      env: strict   # except for environment variables; there, we want to be strict
- name: Start container with healthstatus
  community.docker.docker_container:
    name: nginx-proxy
    image: nginx:1.13
    state: started
    healthcheck:
      # Check if nginx server is healthy by curl'ing the server.
      # If this fails or timeouts, the healthcheck fails.
      test: ["CMD", "curl", "--fail", "http://nginx.host.com"]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 30s
      start_interval: 10s
- name: Remove healthcheck from container
  community.docker.docker_container:
    name: nginx-proxy
    image: nginx:1.13
    state: started
    healthcheck:
      # The "NONE" check needs to be specified
      test: ["NONE"]
- name: Create a tmpfs with a size and mode
  community.docker.docker_container:
    name: tmpfs test
    image: ubuntu:22.04
    state: started
    mounts:
      - type: tmpfs
        target: /cache
        tmpfs_mode: "1700" # only readable to the owner
        tmpfs_size: "16G"
- name: Start container with block device read limit
  community.docker.docker_container:
    name: test
    image: ubuntu:18.04
    state: started
    device_read_bps:
      # Limit read rate for /dev/sda to 20 mebibytes per second
      - path: /dev/sda
        rate: 20M
    device_read_iops:
      # Limit read rate for /dev/sdb to 300 IO per second
      - path: /dev/sdb
        rate: 300
- name: Start container with GPUs
  community.docker.docker_container:
    name: test
    image: ubuntu:18.04
    state: started
    device_requests:
      - # Add some specific devices to this container
        device_ids:
          - '0'
          - 'GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a'
      - # Add nVidia GPUs to this container
        driver: nvidia
        count: -1  # this means we want all
        capabilities:
          # We have one OR condition: 'gpu' AND 'utility'
          - - gpu
            - utility
          # See https://github.com/NVIDIA/nvidia-container-runtime#supported-driver-capabilities
          # for a list of capabilities supported by the nvidia driver
- name: Start container with storage options
  community.docker.docker_container:
    name: test
    image: ubuntu:18.04
    state: started
    storage_opts:
      # Limit root filesystem to 12 MB - note that this requires special storage backends
      # (https://fabianlee.org/2020/01/15/docker-use-overlay2-with-an-xfs-backing-filesystem-to-limit-rootfs-size/)
      size: 12m
返回值
常用返回值已在此处记录,以下是此模块独有的字段
| 键 | 描述 | 
|---|---|
| 表示容器当前状态的事实。与docker检查输出匹配。 如果 如果 返回:成功;或者当 示例: | |
| 如果在不分离的情况下启动容器,则包含容器中进程的退出代码。 在community.docker 1.1.0之前,只有在非零时才返回此值。 返回:当 示例: | 
