Предоставьте контейнер, созданный докером, с помощью network_mode: "host" и сохраните контейнер в сети контейнера. - PullRequest
0 голосов
/ 07 марта 2019

Я довольно плохо знаком с docker и docker compose, так что простите, если это глупый вопрос ...

У меня есть составной файл с 2 контейнерами. Контейнер Homeassistant с портом 8123 открыт и база данных с 5432. Homeassistant может получить доступ к базе данных, используя url postgresql://user:password@db:5432/homeassistant_db. Я думаю, что это потому, что Docker создал на хосте привязку db, и поэтому я могу подключиться к db.

Однако мне нужно привязать homeassistant к хосту, что я могу сделать с network_mode: "host", что вы можете увидеть закомментировано в моей конфигурации. Когда я делаю это, я действительно могу связываться с хостом, а homeassistant может обнаруживать сетевые устройства и т. Д ...

К сожалению, это разрывает соединение с базой данных, поэтому я не могу больше использовать postgresql://user:password@db:5432/homeassistant_db url.

Как мне присоединить homeassistant к хосту И поддерживать соединение с базой данных? Я полагаю, что я мог бы изменить хост базы данных с db на URL-адрес или сетевое имя пи (например, postgresql://user:password@192.168.0.100:5432/homeassistant_db или postgresql://user:password@homeassistant.local:5432/homeassistant_db), но это не так чисто и надежно, как могло бы быть.

Я не совсем понимаю сетевые привязки, поэтому я хочу попробовать и научиться, чтобы я мог сам исправить это в будущем.

составьте файл ниже:

version: '3'

services:

  db:
    restart: always
    container_name: "homeassistant_db_container"
    # image: postgres:latest
    image: tobi312/rpi-postgresql
    ports:
      - "5432:5432"
    volumes:
      - ./data/postgres/data:/var/lib/postgresql/data/pgdata
    env_file:
      - ./envs/database.env

  home_assistant:
    container_name: "homeassistant_container"
    restart: always
    image: homeassistant/raspberrypi3-homeassistant
    ports:
      - "8123:8123"
    # network_mode: "host"
    env_file:
      - ./envs/homeassistant.env
    volumes:
      - ./configs/homeassistant:/config
    depends_on:
      - db


volumes:
  data:
    driver_opts:
      type: none
      o: bind
      device: "${PWD}/data/postgres"

1 Ответ

1 голос
/ 07 марта 2019

Вы можете добавить оба контейнера в одну сеть, как показано ниже.Тогда вы можете использовать, как вы хотите.Просто добавьте приведенный ниже код в ваш файл.Затем он создаст сеть и добавит туда оба этих контейнера.Это также обеспечит вам уровень безопасности, так что другие контейнеры не смогут общаться с вашим контейнером БД.

Во-вторых, удалите container_name.Вы путаете себя.Службы получают имена своих хостов, равные именам служб по умолчанию.

networks:
  default:
    external:
      name: "tools"
...