Не удается получить доступ к rest-end точке начальной загрузки внутри контейнера Docker при использовании docker-compose - PullRequest
1 голос
/ 03 июля 2019

Я устанавливаю подпружиненные приложения в docker с помощью docker-compose, и мне нужно получить доступ к конечной точке отдыха из одного приложения на порту 8080 с моего локального хоста. Следующая конечная точка отлично работает при локальном запуске http://localhost:8080/central/products.

Я на Ubuntu 19.10 и работаю в докере версии 18.09.5. Когда я настраивал простое приложение для начальной загрузки для докера, как описано в https://spring.io/guides/gs/spring-boot-docker/,, все работало как положено, и я могу достичь конечной точки в http://localhost:8080/. Однако, когда я запускаю больше сервисов с помощью docker-compose, я не могу достичь этой конечной точки с моего локального хоста.

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

Выход из докера проверяет:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "b91760f810a656e382d702dd408afe3c5ffcdf4c0cd15ea8550150867ac038cc",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    }
                ]
            }

Логи с пружинной загрузки

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

Вывод из docker inspect рабочего подпружиненного контейнера и неработающего выглядит практически одинаково. Я также могу получить доступ к веб-интерфейсу rabbitmq и MongoDB через клиент mongo. Единственное, что не работает - это доступ к остальной конечной точке через http://localhost:8080/central/products.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

в вашем Dockerfile отсутствует оператор EXPOSE, поэтому порты не доступны внешнему миру.

как только вы добавите EXPOSE 8080 в конец вашего Dockerfile, ваше приложение будет доступно из-за пределов контейнера.

0 голосов
/ 03 июля 2019

Проблема вызвана файлом application.properties, в котором все еще было указано server.address=localhost.

Удаление этой строки решило проблему!

...