【发布时间】:2021-06-23 01:03:41
【问题描述】:
以下情况:
- 我有一个 Spring Boot 应用程序
- 在 Docker 群中运行
- 但由于未正确配置(缺少属性)而无法启动。
- 在我看来,docker swarm 总是试图重新启动容器,但由于缺少属性而总是失败。
- 重新启动没有意义,因为除非我修复缺少的属性,否则 docker 将永远无法启动应用程序。
- 因此,目前 swarm 以无限循环结束。
关于这个问题我已经读过:
- docker 文档:https://docs.docker.com/config/containers/start-containers-automatically/
- 和几个 StackOverflow 帖子:https://stackoverflow.com/search?q=Docker+restart
我的“设置”: 泊坞窗文件:
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
我想要实现的是:
- 如果 Spring Boot 应用程序由于
BeanCreationException或类似原因而无法启动,那么我不希望 docker 服务无休止地重新启动。 - 如果我重新启动 swarm 等,docker 服务应该会自动重新启动。
在docker文档中是这样写的:
如果你手动停止一个容器,它的重启策略会被忽略,直到 Docker 守护进程重启或者容器被手动重启。这是防止重启循环的另一种尝试。
所以我想我想通过重启策略实现的目标是不可能的。
问题:
- 但也许我可以在我的
Dockerfile中写一些东西来实现我的目标? - 或者我在这里完全错了并且误解了文档?
不幸的是,我不是 docker 专家,但仍在学习处理“群”。
【问题讨论】:
标签: java docker docker-swarm