我非常喜欢停泊对手,我在前几天阅读了官方教程如何使用它。 我决定将我非常简单的spring-boot应用程序作为服务部署到一个swarm中,但我无法从外部访问它。顺便说一句,当我用docker run启动docker时,可以访问容器。
所以我的spring-boot tomcat正在收听8081。
Dockerfile:
FROM java:openjdk-8-alpine
VOLUME /tmp
EXPOSE 8081
ADD docker-demo-1.0.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-
jar","/app.jar"]
搬运工-compose.yml:
version: "3"
services:
web:
image: neyma6/demo:3.0
deploy:
replicas: 2
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8081:8081"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8082:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
我部署了2个服务,一个可视化工具和一个spring-boot应用程序。可视化工具可在http://localhost:8082/上访问,但该应用不在http://localhost:8081/test
上docker swarm init
docker stack deploy -c docker-compose.yml demo
我做错了什么?
答案 0 :(得分:0)
我假设您在本地(1个节点)上部署了此docker堆栈,但您尝试在同一个8081端口上打开2个容器(副本)。港口将发生冲突。
将副本更改为1,然后重试。
答案 1 :(得分:0)
我弄清楚问题是什么,没有足够的内存提供给spring-boot运行容器......