@ceasar13m

Как правильно прокинуть порты в docker-compose?

Я новичок в devOps, если задаю вопрос неверно прошу сильно не ругаться.

В doker-compose файле есть несколько микросервисов, postgres и kafka. Проблема: Микросервисы не видят друг друга и кафку, Наружу торчат только сервис server на порте 8080 и postgres на порте 5432. Как пробросить порты и какой урл нужно указывать в @FeignClient в классе клиента?

docker-compose:
version: '3.8'

volumes:
  pg_market:

services:
  server:
    image: 'server:latest'
    build:
      context: .
    container_name: server
    depends_on:
      - pg_db
    ports:
      - "8080:8080"
    links:
      - pg_db:database
  recommendation:
    image: 'recommendation:latest'
    build:
      context: .
    container_name: recommendation
    depends_on:
      - pg_db
    ports:
      - "8082:8082"
    links:
      - pg_db:database
  pg_db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=1
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres
    volumes:
      - pg_market:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: recommendation
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181


И для примера еще application.yaml:
server:
  port: 8082
spring:
  datasource:
    url: jdbc:postgresql://database/postgres
    driver-class-name: org.postgresql.Driver
    username: postgres
    password: 1
kafka:
  bootstrap-servers: localhost:9092
  client-id: local
  auto-commit-interval: 1000
  topic: recomendation


@Component
@FeignClient(name = "market", url = "localhost:8082/api/v1/")
@EnableDiscoveryClient
public interface Client {

}
  • Вопрос задан
  • 4417 просмотров
Решения вопроса 1
@ceasar13m Автор вопроса
Нужно было всего лишь добавить "network_mode: host" в docker-compose. После того, как файл принял следующий вид, все заработало:
version: '3.8'

volumes:
  pg_market:

services:
  server:
    image: 'server:latest'
    build:
      context: .
    container_name: server
    depends_on:
      - pg_db
    ports:
      - "8080:8080"
    network_mode: host
    links:
      - pg_db:database
  recommendation:
    image: 'recommendation:latest'
    build:
      context: .
    container_name: recommendation
    depends_on:
      - pg_db
    ports:
      - "8082:8082"
    network_mode: host
    links:
      - pg_db:database
  pg_db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=1
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres
    volumes:
      - pg_market:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    network_mode: host
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    network_mode: host
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: recommendation
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
Так как используется docker-compoe сервисы автоматически подключаться к виртуальной сети и смогут обращаться друг к другу по имени сервиса (если нет необходимости обращаться к сервису с хостовой машины или из-за её пределов, то порты можно не пробрасывать).

Например для подключения к kafka в конфиге надо указать:
kafka:
  bootstrap-servers: kafka:9092
  client-id: local
  auto-commit-interval: 1000
  topic: recomendation
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы