Задать вопрос

Как в docker обращаться к другому контейнеру?

Я не совсем понимаю, как можно из одного контейнера, обратиться к другому контейнеру или как можно вызвать центрифуга.

Мои docker-compose.yml
version: '3.2'

networks:
  project:

services:
  nginx:
    container_name: project_nginx
    image: nginx:1.18.0
    ports:
      - 80:80
    volumes:
      - ./:/var/www/project
      - ./docker/nginx/api.project.local.conf:/etc/nginx/conf.d/api.project.local.conf
      - ./docker/nginx/b.project.local.conf:/etc/nginx/conf.d/b.project.local.conf
      - ./docker/nginx/lk.project.local.conf:/etc/nginx/conf.d/lk.project.local.conf
    networks:
      - project
    depends_on:
      - php
  php:
    container_name: project_php
    build: /docker/php8.1-fpm
    volumes:
      - ./:/var/www/project
      - ./docker/php.ini:/usr/local/etc/php/conf.d/php.ini
    networks:
      - project
    depends_on:
      - db
  db:
    container_name: project_db
    restart: always
    image: mariadb:10.1
    command: ["--default-authentication-plugin=mysql_native_password"]
    volumes:
      - ./docker/mariadb/scripts/table.sql:/docker-entrypoint-initdb.d/1-table.sql
      - ./docker/mariadb/scripts/data.sql:/docker-entrypoint-initdb.d/2-data.sql
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: project
      MYSQL_USER: myUser
      MYSQL_PASSWORD: myUser
    networks:
      - project
  adminer:
    image: adminer
    container_name: project_adminer
    restart: always
    depends_on:
      - db
    ports:
      - 8088:8080
    networks:
      - project
  centrifugo:
    container_name: centrifugo
    image: centrifugo/centrifugo:v5
    volumes:
      - ./docker/centrifugo.json:/centrifugo/config.json
    command: centrifugo -c config.json
    ports:
      - 8000:8000
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    networks:
      - project

Но чтобы мне сгенерировать токен у centrifugo из контейнера php не пойму как. Если я на локальной машине запущу команду, то я получу
docker exec -it centrifugo centrifugo gentoken -u 76
HMAC SHA-256 JWT for user "76" with expiration TTL 168h0m0s:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3NiIsImV4cCI6MTcyOTUzNTM1OSwiaWF0IjoxNzI4OTMwNTU5fQ.fc36bDoa7yK-3ZH8FpknViK30imENfyEimpCX5B39d4

Но когда мое приложение на php работает, я не смогу такую команду выполнить. Как правильно и как вообще мне обращаться к другому контейнеру.

Или это все по другому делается?
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
@rubicomtech
Общаться между собой контейнеры могут общаться напрямую:
- по своим container_name средствами нативного DNS в докер. В этом случае порты = стандартные порты, которые слушает вас целевой контейнер (не проброшенный средствами compose).
- Другой вариант - назначение средствами docker compose вашим контейнеров статических IP-адресов и общение через них, но это исключительная история.

Третий вариант, который судя по наличию в вашем конфиге ports, возможно, предполагался - это общение через сам хост докера, то есть через порты, высталенные на сам хост. В этом случае нужно проверить, что фаерволл Docker-хоста разрешает подключения с localhost на выставленные хосту порты в вашем докер-файле.

Если у вас возникнут другие вопросы по Docker, вы можете обратиться к нам в rubicom.tech для получения готовых шаблонов быстрого развертывания популярных сервисов для Docker и Kubernetes
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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