Контейнеры Springboot и Mon go не соединяются - PullRequest
2 голосов
/ 23 апреля 2020

Я запускаю 2 контейнера на локальном компьютере, используя docker compose. Первый - это контейнер mon go, а второй - приложение с загрузочной пружиной.

Это Dockerfile моей весенней загрузки

VOLUME /tmp
ADD target/app.jar app.jar
EXPOSE 8080
RUN bash -c "touch /app.jar"
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongo/test", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Это свойства приложения моей весенней загрузки

# mongodb configuration0
dockerspring.data.mongodb.uri= mongodb://mongo:27000/test

Это мой docker -compose.yml

version: '3.1'

services: 

  level-2-springboot:
    image: level-2:latest
    restart: always
    container_name: level_2_microservice
    ports:
      - 8081:8080
    working_dir: /tmp
    depends_on: 
      - mongo

  mongo:
    image: mongo
    container_name: mongo
    ports: 
      - 27000:27017
    restart: always

Это мой pom. xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yash</groupId>
    <artifactId>spring-sync-ms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-sync</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>            
        </dependency>       
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>app</finalName>
    </build>

</project>

Я выполняю это, чтобы создать образ для моего весеннего загрузочного приложения

docker build -t level-2 .

После Я вижу свое изображение, я выполняю docker-compose up, и они прекрасно работают без ошибок

enter image description here

Вот контейнеры, работающие

enter image description here

Но когда я выполняю запрос POST или GET на localhost:8081/api/employees/ или localhost:8080/api/employees/, я получаю это сообщение от Почтальона

Не могу получить любой ответ

Ниже приведена структура моего проекта

enter image description here

Если я запускаю приложение в eclipse и mon go вручную и выполнить запрос POST / GET, я получу 201 ОК, но когда я делаю это, используя docker в контейнерах, они не общаются друг с другом. Кто-нибудь знает, что вызвало это?

Ответы [ 3 ]

0 голосов
/ 23 апреля 2020

Исключительно указывает сеть = mynetwork, прежде чем образ приложения исправит это. например,

docker run --network=mynetwork pritam

В качестве альтернативы, если вы не хотите явно определять IP-адреса, вы можете использовать имя контейнера в качестве имени хоста для строк подключения, когда два контейнера находятся в одной сети. например,

<mongo:mongo-client id="mongo" host="mongocontainer" port="27017" >

вместо

<mongo:mongo-client id="mongo" host="172.21.0.2" port="27017" >
0 голосов
/ 23 апреля 2020

Это:
# mongodb configuration0 dockerspring.data.mongodb.uri= mongodb://mongo:27000/test

Должно быть:
# mongodb configuration0 dockerspring.data.mongodb.uri= mongodb://mongo:27017/test

Две службы в вашем docker -compose.yml предоставляют порты 8081 и 27000 для хост-машина .
Но внутри сети, созданной docker -compose , они предоставляют порты 8080 и 27017. Так как ваш Mon go -Ctainer работает в сети docker, он должен использовать порт 27017 для подключения к базе данных.

0 голосов
/ 23 апреля 2020

Я проконсультировался с inte rnet и думаю, что получил то, что вам нужно.

Вопрос, который следует ниже: «Как наш сервисный контейнер взаимодействует с контейнером Mon go? » Для этого мы попадаем в контейнер, связывающий . Когда вы запускаете контейнер, вы можете передать необязательный параметр –link, указывающий работающий контейнер name , с которым новый контейнер должен иметь возможность взаимодействовать.

Итак, с помощью нашей команды

docker run -P -d --name employee --link mongodb microservicedemo/employee 

мы запускаем наш новый образ контейнера, выставляя его порты (-P) на заднем плане (-d), называя его сотрудника (–name) и сообщая ему ссылку на контейнер с именем «mongodb» (–link). Связывание с ними делает следующее:

Создает запись файла hosts в контейнере сотрудника, указывающую на рабочее местоположение контейнера MongoDB. Вставляет несколько переменных среды в контейнер сотрудника, чтобы помочь с любым другим программным доступом c. Нужен.

Чтобы увидеть, как они запускаются: docker exec employee bash -c 'env |grep MONGODB' Позволяет контейнерам связываться напрямую через открытые порты, поэтому не нужно беспокоиться о отображении деталей шланговых машин.

см: https://www.3pillarglobal.com/insights/building-a-microservice-architecture-with-spring-boot-and-docker-part-iii

https://www.3pillarglobal.com/insights/building-a-microservice-architecture-with-spring-boot-and-docker-part-ii

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...