Con*_*nor 3 docker docker-compose
当我尝试使用它运行时docker stack deploy -c docker-compose.yml stack-name
,出现错误:Error response from daemon: invalid RestartCondition: "unless-stopped"
如果中断,我需要超级服务和 docker 容器重新启动。如果没有restart_policy
(仅--restart unless-stopped
用于容器),如果我重新启动我的机器,它只会重新启动容器,而不是服务。超级服务让我可以使用仅限服务的 docker 功能(如机密、配置、资源等)。容器让我可以使用设备。
Docker支持重启策略。我也看到了这个线程,但我不知道该怎么做或者它是否相关。我有点像 Docker 菜鸟。
我的docker-compose.yml
文件:
version: "3.2"
services:
superservice:
image: docker
command: docker run -it --restart unless-stopped --device=/dev/video0 --volume=/path:/path --name container_name my/image
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
replicas: 1
mode: replicated
restart_policy:
condition: unless-stopped
resources:
limits:
cpus: '0.70'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
placement:
constraints: [node.role == manager]
stdin_open: true
tty: true
Run Code Online (Sandbox Code Playgroud)
Docker 版本 18.05.0-ce,构建 f150324
Linux raspberrypi 4.14.50-v7+ #1122 SMP Tue Jun 19 12:26:26 BST 2018 armv7l GNU/Linux
如果您部署为堆栈,则不需要重新启动策略,我什至看到它在极端情况下(主机内存不足)会破坏事情。这是因为 swarm 模式会查看您定义的目标状态,将其与当前状态进行比较,并协调任何差异。
因此,如果您的容器停止,无论重启策略如何,swarm 模式都会重新创建一个新实例。手动停止一个容器会导致一个新的实例被启动,与失败一样,甚至是滚动更新。
要手动停止由 swarm 模式管理的容器,您需要推送一个新的目标状态,其中该服务有 0 个副本作为新目标。
回答我自己的问题:
重启策略不会从 docker compose 1:1 映射到 docker cli。
docker-compose策略可以在这里找到
condition
:none
、on-failure
或 之一any
(默认值:any
)。
services:
service-name:
deploy:
restart_policy:
condition: on-failure
Run Code Online (Sandbox Code Playgroud)
docker cli政策可以在这里找到
no
容器退出时不要自动重启。这是默认设置。
on-failure[:max-retries]
仅当容器以非零退出状态退出时才重新启动。(可选)限制 Docker 守护进程尝试重新启动的次数。
always
无论退出状态如何,始终重新启动容器。当您指定always时,Docker守护进程将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。
unless-stopped
无论退出状态如何,始终重新启动容器,包括在守护进程启动时,除非容器在 Docker 守护进程停止之前进入停止状态。
归档时间: |
|
查看次数: |
3543 次 |
最近记录: |