Этот вопрос закрыт для ответов, так как повторяет вопрос Docker: почему локальный IP-адрес машины-хоста недоступен для соединений внутри кластера?
@MikUrrey

Как сделать так, чтобы в сети docker была «видна» сеть машины-хоста?

Приветствую!
На хосте с Ubuntu 20 поднят кластер из нескольких контейнеров, объединенных между собой в одну сеть.
Кластер представляет собой стек разработки nginx + php-fpm + mysql + memcached + redis.
Nginx "крутит" несколько "сайтов", их имена (test.local, project.loc и т. п.) прописаны в hosts-файле и спокойно открываются в браузере хоста. Но есть так же необходимость, чтобы эти имена были доступны из скриптов, размещенных на самих же этих "сайтах", чтобы выполнить, например,
getimagesize("http://project.loc/image.jpg");
или запустить приемочное тестирование REST API.
Грубо говоря, как сделать так, чтобы test.local, размещенный в кластере, "видел сам себя со стороны"?
Желательно без необходимости добавлять хосты вручную.
docker-compose

version: '3'
services:
  #PHP
  php:
    build:
      context: ./image/php/${PHP_VERSION}/.
    image: openweb/php:${PHP_VERSION}
    container_name: os-php${PHP_VERSION}
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
    working_dir: /var/www
    volumes:
      - ./www:/var/www
      - ./config/php/php.ini:/usr/local/etc/php/php.ini
      - ./scripts:/bin/app
  #Nginx Service
  webserver:
    image: nginx:alpine
    container_name: os-nginx
    restart: unless-stopped
    tty: true
    ports:
      - "${WWW_PORT}:80"
      - "${WWW_SECURITY_PORT}:443"
    volumes:
      - ./www:/var/www
      - ./config/nginx/:/etc/nginx/conf.d/
      - ./scripts:/bin/app
  #MySQL Service
  mysql:
    image: mysql:5.7.24
    container_name: os-mysql5.7.24
    restart: unless-stopped
    tty: true
    ports:
      - "${MYSQL_PORT}:3306"
    volumes:
      - ./db/mysql:/var/lib/mysql
      - ./scripts:/bin/app
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
  #Redis Service
  redis:
    image: redis
    container_name: os-redis
    restart: unless-stopped
    tty: true
    ports:
      - "${REDIS_PORT}:6379"
    volumes:
      - ./db/redis:/var/lib/redis
      - ./scripts:/bin/app
    environment:
      - REDIS_REPLICATION_MODE=master
  #Memcached
  memcached:
    image: memcached
    container_name: os-memcached
    restart: unless-stopped
    tty: true
    ports:
      - "${MEMCACHED_PORT}:11211"
#Volumes
volumes:
  dbdata:
    driver: local

  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@q2digger
никого не трогаю, починяю примус
Это называется network aliases
Пример:
services:
  proxy:
    image: jwilder/nginx-proxy
    ports:
      - 0.0.0.0:80:80
      - 0.0.0.0:443:443
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
      - ./certs/:/etc/nginx/certs:ro
      - ./jira-nginx.conf:/etc/nginx/vhost.d/jira.local.net
    networks:
      proxy:
        aliases:
          - "site.local.net"

Другой контейнер сможет обращаться к этому по имени контейнера (proxy) - как обычно , а также по alias - site.local.net
То есть строка c адресом и именем этого контейнера будет в файлах hosts всех остальных контейнеров стека.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы