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.docker.net.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.docker.net.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之前,只有在非零时才返回此值。 返回:当 示例: |