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