Docker-составьте мостовую сеть и перенаправьте удаленный порт хоста в одном контейнере - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать службу, которая может перенаправлять порт удаленной базы данных в контейнер и в то же время может быть доступна по псевдониму имени хоста из других контейнеров для работы с ними.
Мне кажется, что все контейнеры взаимодействуют с хостомсеть - плохая практика, поэтому я пытаюсь настроить эту конфигурацию.
Когда я пытаюсь добавить в сервисную сеть php-fpm с driver: host, докер говорит
only one instance of "host" network is allowed
Когда я пытаюсьустановить службу php-fpm с этим

networks
- host

Докер говорит, что не может найти сеть с этим именем.
Когда я пытаюсь определить сеть в docker-compose по идентификатору встроенного host, он просто не может запустить этот контейнер.

Это мой docker-compose:

version: '3.2'

networks:
  backend-network:
    driver: bridge
  frontend-network:
    driver: bridge

volumes:
  redis-data:
  home-dir:

services:
  &app-service app: &app-service-template
    build:
      context: ./docker/app
      dockerfile: Dockerfile
    volumes:
    - ./src:/app:rw
    - home-dir:/home/user
    hostname: *app-service
    environment:
      FPM_PORT: &php-fpm-port 9001
      FPM_USER: "${USER_ID:-1000}"
      FPM_GROUP: "${GROUP_ID:-1000}"
      APP_ENV: local
      HOME: /home/user
    command: keep-alive.sh
    networks:
    - backend-network

  &php-fpm-service php-fpm:
    <<: *app-service-template
    user: 'root:root'
    restart: always
    hostname: *php-fpm-service
    ports: [*php-fpm-port]
    environment:
      FPM_PORT: *php-fpm-port
      FPM_USER: "${USER_ID:-1000}"
      FPM_GROUP: "${GROUP_ID:-1000}"
      APP_ENV: local
      HOME: /home/user
    entrypoint: /fpm-entrypoint.sh
    command: php-fpm --nodaemonize -R -d "opcache.enable=0" -d "display_startup_errors=On" -d "display_errors=On" -d "error_reporting=E_ALL"
    networks:
    - backend-network
    - frontend-network

  nginx:
    build:
      context: ./docker/nginx
      dockerfile: Dockerfile
    restart: always
    working_dir: /usr/share/nginx/html
    environment:
      FPM_HOST: *php-fpm-service
      FPM_PORT: *php-fpm-port
      ROOT_DIR: '/app/public' # App path must equals with php-fpm container path
    volumes:
    - ./src:/app:ro
    ports: ['9999:80']
    depends_on:
    - *php-fpm-service
    networks:
    - frontend-network

Сетевая схема (вопрос о зеленой линии):
Network Scheme

Хост работает на Debian 7 (обновления запрещены), а conainer работает с последней Alpine

...