以下情况:
关于这个问题,我已经读过:
我的“设置”: dockerfile:
ARG nexus_docker_registry=mynexus.com:10099
FROM ${nexus_docker_registry}/openjdk:8-jdk-alpine
ADD myjar.jar myjar.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "java", "-jar", "/myjar.jar" ]
我的YML文件创建docker服务:
---
- hosts: docker_manager
become: false
vars:
servicename: 'myservice'
imageurl: "mynexus.com:10099/myjar:{{version}}"
extraoptions:
- "--with-registry-auth"
- "--detach=true"
- "--log-driver gelf"
- "--log-opt 'gelf-address=udp://{{ groups['logstash'][0] }}:10001'"
- "--hostname 'myhost.com'"
- "--mount 'type=bind,source=/etc/localtime,destination=/etc/localtime:ro'"
- "--mount 'type=volume,source=mykeys,destination=/mykeys'"
- "--env 'spring.profiles.active=docker'"
- "--publish 8000:6666"
tasks:
- name: Include vault
include_vars: "myvault.yml"
- name: "delete service '{{ servicename }}'"
command: sudo docker service rm "{{ servicename }}"
args:
warn: false
ignore_errors: true
run_once: true
- name: "create service {{ servicename }}"
command: sudo docker service create {{ extraoptions | join( ' ' ) }} --name "{{ servicename }}" "{{ imageurl }}"
args:
warn: false
run_once: true
我想要实现的是:
BeanCreationException
或类似原因而无法启动,那么我不希望Docker服务无限重启。在docker文档中写道:
如果手动停止容器,则其重新启动策略将被忽略,直到Docker守护程序重新启动或手动重新启动容器为止。这是防止重新启动循环的另一种尝试。
因此,我想使用重新启动策略无法实现我想要的目标。
问题:
Dockerfile
中写一些达到目标的东西? 很遗憾,我不是Docker专家,仍然在学习处理“群”。
答案 0 :(得分:0)
Docker中有4种不同的restart policies:
no
-不要自动重启容器。 (默认)on-failure
-如果容器由于错误而退出,则重新启动容器,该错误表现为非零退出代码。always
-如果容器停止,请务必重新启动unless-stopped
-与往常相似,除了在容器停止(手动或其他方式)时,即使重新启动Docker守护程序也不会重新启动容器。泊坞窗无法从应用程序“检测”某种错误类型并重新启动或不重新启动。
实现此目标的一种方法是在容器中使用supervisord,并根据定义的退出代码列表来处理重启。但这意味着您的容器仅在管理程序崩溃时才会重新启动,而不是在应用程序崩溃时重新启动,并且您必须更改代码以针对应重新启动的错误和不应重新启动的错误返回不同的退出代码。
答案 1 :(得分:0)
因为似乎无法实现我想实现的目标,所以我再次阅读了文档(https://docs.docker.com/engine/reference/commandline/service_create/),并找到了选项--restart-max-attempts
,它将解决无休止循环的问题。
答案 2 :(得分:0)
您可能想尝试实现基于 docker-compose 文件创建 docker stack
。
在这种情况下,如 compose v3 documentation 所示,您可以完全控制服务重启策略。
下一个例子不允许重启:
version: "3.9"
services:
python:
image: my_user/my_repo:my_container
volumes:
- /home/python:/home
deploy:
restart_policy:
condition: none
您可以使用 restart_policy
和 condition: [none | on-failure | any]
max_attempts: [your_int]
块