无法访问从本地主机在docker容器中运行的Spring Boot应用

时间:2020-04-27 10:32:11

标签: spring-boot docker docker-compose

我在这个问题上苦苦挣扎了几个小时。 我有以下设置:

Dockerfile

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/ROOT.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar","--spring.profiles.active=dev"]
EXPOSE 8080

docker-compose.yml

version: '3'
services:
  app:
      container_name: app
      build:
         context: .
         dockerfile: Dockerfile
      restart: always
      links:
        - mysql-db
      depends_on:
        - mysql-db
      ports:
        - 8080:8080
      expose:
        - 8080
      networks:
        - spring-network
  mysql-db:
      restart: always
      container_name: mysql_db
      image: "mysql:8.0.19" 
      ports:
        - 3306:3306
      networks:
        - spring-network
      environment:
         MYSQL_ROOT_PASSWORD: 'password'
         MYSQL_DATABASE: 'db'
         MYSQL_USER: 'db-user'
         MYSQL_PASSWORD: 'password'
      volumes:
        - mysql-db:/var/lib/mysql
      command: --innodb-use-native-aio=0
      security_opt:
        - seccomp:unconfined
volumes:
  mysql-db:
networks:
    spring-network:
        driver: bridge

当我使用docker-compose up运行应用程序时,它在容器中运行良好,但是当我在浏览器中访问localhost:8080时,我得到了

localhost意外关闭了连接

编辑:

  • 在端口8080上运行的Spring Boot应用程序
  • docker版本19.03.8

2 个答案:

答案 0 :(得分:1)

几天后,我发现了问题所在。我使用的是旧的jar文件(将应用程序暴露在端口80:/上),我所做的只是生成一个新的构建,该构建将应用程序暴露在8080 mvn clean install上,然后构建映像docker-compose build,一切正常现在很好

答案 1 :(得分:0)

删除暴露-供容器之间内部使用

expose的文档

编辑: 您还拥有一个分支网络,并且默认情况下,您只能在同一桥接网络上的容器之间进行通信。

要么只是卸下网络部件-如果这有问题,这可能会导致容器暴露得过多。

或者阅读有关端口转发here的信息