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 规则列表。 | |
| 设备路径和从设备读取速率(每秒字节)的列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制,格式为  Number 是一个正整数。Unit 可以是  省略单位默认为字节。 | |
| 设备及其读取速率(每秒 I/O 次数)列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制。 必须是正整数。 | |
| 允许请求额外的资源,例如 GPU。 | |
| 字符串列表的列表,用于请求功能。 顶级列表项通过 OR 组合,对于每个列表项,其包含的列表中的项通过 AND 组合。 驱动程序尝试满足其中一个子列表。 
 | |
| 要请求的设备数量。 设置为  | |
| 设备 ID 列表。 | |
| 为此设备使用的驱动程序。 | |
| 特定于驱动程序的选项。 | |
| 设备及其写入速率(每秒字节数)列表。 | |
| 容器中的设备路径。 | |
| 设备读取限制,格式为  Number 是一个正整数。Unit 可以是  省略单位默认为字节。 | |
| 设备及其写入速率(每秒 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进程,用于转发信号和回收进程。 如果  选项 
 | |
| 设置容器的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>]。 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仓库中创建一个issue。对于较旧的community.docker版本,您可以使用 | |
| 要从容器发布到主机的端口列表。 使用Docker CLI语法: 可以使用端口范围作为源端口和目标端口。如果指定了长度不同的两个范围,则将使用较短的范围。从community.general 0.2.0版本开始,如果源端口范围的长度为1,则端口不会分配给目标范围的第一个端口,而是分配给该范围内的空闲端口。这与 绑定地址必须是IPv4或IPv6地址。不允许使用主机名。这与 如果提供了 在早期版本的此模块中允许使用值 | |
| 如果设置为 如果设置为 如果设置为 注意:只有按名称指定时才会拉取镜像。如果镜像指定为镜像ID(哈希值),则无法拉取,并且会忽略此选项。 注意:值 选项 
 | |
| 允许在检查模式下调整 由于Docker守护进程没有公开任何功能来测试拉取是否会导致镜像更改,因此默认情况下,模块的行为类似于 如果设置为 如果设置为 选项 
 | |
| 与present和started状态一起使用,强制重新创建现有容器。 选项 
 | |
| 删除现有容器时,Docker守护进程API调用在容器被安排删除后存在。删除通常非常快,但在高I/O负载期间,删除可能需要更长时间。默认情况下,模块将等待直到容器被删除后再尝试(重新)创建它,无论需要多长时间。 通过设置此选项,模块最多将等待这么多秒来删除容器。如果这么多秒后容器仍在删除阶段,则模块将失败。 | |
| 与started状态一起使用,强制停止并重新启动匹配的容器。 选项 
 | |
| 容器重启策略。 在 选项 
 | |
| 与重启策略一起使用,以控制最大重启尝试次数。 | |
| 用于容器的运行时。 | |
| 安全选项列表,格式为 | |
| 
 省略单位默认为字节。如果完全省略大小,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 之前,只有在非零时才会返回此值。 返回:当  示例:  | 
