Не могу заставить работать docker -compose network - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь сделать запросы к моему контейнеру сервера из моего клиентского приложения в другом контейнере. В документах Docker Compose указано, что сеть настраивается автоматически, поэтому не должны ли все порты быть доступны из всех контейнеров? Когда я делаю запрос curl на порт 4000 извне контейнера (в терминале fre sh), он работает. Однако когда я вхожу в контейнер клиента (selektor-client) и пытаюсь выполнить тот же запрос, он терпит неудачу.

curl --request POST http://localhost:4000/api/music

Что я делаю не так?

docker -compose.yaml:

version: "3"
services:
  client:
    container_name: selektor-client
    restart: always
    build: ./client 
    ports:
      - "3000:3000"
    volumes:
      - ./client/:/client/
      - /client/node_modules/
    command: ["yarn", "start"]
  server:
    container_name: selektor-server
    restart: always
    build: ./server 
    ports:
      - "4000:4000"
    volumes:
      - ./server/:/server/
    depends_on:
      - mongo
    command: ["yarn", "start"]
  mongo:
    container_name: selektor-mongo
    command: mongod --noauth
    build: .
    restart: always
    volumes:
      # - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
      - data-volume:/data/db
    ports:
      - "27017:27017"
volumes:
  data-volume:

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Когда вы вызываете контейнеры одного стека друг у друга, имя хоста по умолчанию является именем службы, а порт - внутренним портом: <servicename>:<internal_port>. Итак, на основе этой части вашего примера:

version: "3"
  server:
    container_name: selektor-server
    restart: always
    build: ./server 
    ports:
      - "4000:4000"
    volumes:
      - ./server/:/server/
    depends_on:
      - mongo
    command: ["yarn", "start"]

URL-адрес, который клиент должен использовать для доступа к серверу: http://server:4000

0 голосов
/ 12 июля 2020

У меня была такая же проблема. Мое решение заключалось в регистрации сети и предоставлении su bnet mast в сеть и регистрации stati c ip для каждого контейнера:

version: "3"
networks: 
  my_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
services:
    mongodb:
      image: mongo:4.2.1
      container_name: mongo
      command: mongod --auth
      hostname: mongo
      networks: 
        my_network:
          ipv4_address: 172.20.0.5
      volumes:
        - /data/db/mongo:/data/db
      ports:
        - "27017:27017"
    rabitmq:
      hostname: rabbitmq
      container_name: rabbitmq
      image: rabbitmq:latest
      networks: 
        my_network:
          ipv4_address: 172.20.0.3
      volumes:
        - /var/lib/rabbitmq:/data/db
      ports:
        - "5672:5672"
        - "15672:15672"
      restart: always

вы можете получить доступ через IP-адреса

...