Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';使用docker compose时,无法访问docker容器内的spring引导rest端点_Java_Spring Boot_Docker_Docker Compose - Fatal编程技术网

Java Can';使用docker compose时,无法访问docker容器内的spring引导rest端点

Java Can';使用docker compose时,无法访问docker容器内的spring引导rest端点,java,spring-boot,docker,docker-compose,Java,Spring Boot,Docker,Docker Compose,我正在使用docker compose在docker内部设置spring boot应用程序,需要从本地主机的8080端口上的一个应用程序访问rest端点。以下端点在本地启动时工作正常http://localhost:8080/central/products 我在ubuntu 19.10上运行docker版本18.09.5。当我为docker设置一个简单的spring boot应用程序(如上所述)时,一切正常,我可以在http://localhost:8080/。但是,当我使用docker co

我正在使用docker compose在docker内部设置spring boot应用程序,需要从本地主机的8080端口上的一个应用程序访问rest端点。以下端点在本地启动时工作正常
http://localhost:8080/central/products

我在ubuntu 19.10上运行docker版本18.09.5。当我为docker设置一个简单的spring boot应用程序(如上所述)时,一切正常,我可以在
http://localhost:8080/
。但是,当我使用docker compose启动更多服务时,我无法从本地主机到达该端点

用于构建spring boot应用程序的Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","sample.EfridgeCentralApplication"]
导致问题的docker-compose.yml文件:

version: '3.7'
services:
  central-london:
    image: demo/efridge-central:latest
    container_name: central-london
    ports:
      - 8080:8080
    environment:
      - SERVER_PORT=8080
      - SPRING_PROFILES_ACTIVE=dev
      - SPRING_DATA_MONGODB_HOST=mongo-central
      - SPRING_DATA_MONGODB_PORT=27017
      - APP_RABBIT_HOSTNAME=rabbit-efridge

  factory-usa:
    image: demo/efridge-factory:latest
    container_name: factory-usa
    ports:
      - 8081:8081
    environment:
      - SERVER_PORT=8081
      - SPRING_PROFILES_ACTIVE=usa
      - SPRING_DATA_MONGODB_HOST=mongo-usa
      - SPRING_DATA_MONGODB_PORT=27017
      - APP_RABBIT_HOSTNAME=rabbit-efridge

  factory-china:
    image: demo/efridge-factory:latest
    container_name: factory-china
    ports:
      - 8082:8082
    environment:
      - SERVER_PORT=8082
      - SPRING_PROFILES_ACTIVE=china
      - SPRING_DATA_MONGODB_HOST=mongo-china
      - SPRING_DATA_MONGODB_PORT=27017
      - APP_RABBIT_HOSTNAME=rabbit-efridge

  mongo-central:
    image: mongo:latest
    container_name: mongo-central
    hostname: mongo-central
    ports:
      - 27017:27017

  mongo-usa:
    image: mongo:latest
    container_name: mongo-usa
    hostname: mongo-usa
    ports:
      - 27018:27017

  mongo-china:
    image: mongo:latest
    container_name: mongo-china
    hostname: mongo-china
    ports:
      - 27019:27017

  rabbit-efridge:
    image: rabbitmq:3-management
    container_name: rabbit-efridge
    hostname: rabbit-efridge
    ports:
      - 15672:15672
      - 5672:5672
docker inspect的输出:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "b91760f810a656e382d702dd408afe3c5ffcdf4c0cd15ea8550150867ac038cc",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    }
                ]
            }
来自spring boot的日志

2019-07-03 11:54:57.654  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-07-03 11:54:57.803  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-07-03 11:54:57.804  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-07-03 11:54:58.149  INFO 1 --- [           main] o.a.c.c.C.[.[localhost].[/central]       : Initializing Spring embedded WebApplicationContext
2019-07-03 11:54:58.150  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 6950 ms
2019-07-03 11:54:59.810  INFO 1 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[mongo-central:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-07-03 11:54:59.810  INFO 1 --- [           main] org.mongodb.driver.cluster               : Adding discovered server mongo-central:27017 to client view of cluster
2019-07-03 11:55:00.256  INFO 1 --- [o-central:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:11}] to mongo-central:27017


正在工作的spring boot容器和未工作的spring boot容器的
docker inspect
输出看起来几乎相同。我还可以通过mongo客户端访问rabbitmq web界面和MongoDB。唯一不起作用的是通过
http://localhost:8080/central/products

您的Dockerfile缺少
EXPOSE
语句,因此没有端口对外公开


一旦您将
EXPOSE 8080
添加到Dockerfile的底部,就可以从容器外部访问您的应用程序

问题是由
application.properties
文件引起的,在该文件中我仍然指定了
server.address=localhost


删除这条线解决了问题

怎么了?连接被拒绝或其他原因?此类问题的常见原因是服务配置为仅侦听127.0.0.1(查找“侦听地址”或“绑定地址”类型设置)。要从其他容器访问它,它必须绑定到0.0.0.0(“所有接口”)http://localhost:8080/central/products我收到
Recv故障:对等方重置连接
感谢您的帮助!我会试试看,然后告诉你。但我想知道为什么它会使用我在问题中提供的spring示例。也没有曝光,工作正常。基本图像allready曝光端口8080。如果你有任何github回购你的项目,我想看看可惜这并没有解决问题。我仍然收到同样的错误,有任何回购吗?它目前在一个私人托管的git上。今天晚些时候我可以把它放到github上。谢谢你的帮助