Как разрешить доступ только определенным сервисам в docker-compose в network?

В Docker Compose можно ограничить доступ только для определенных сервисов, используя свойство networks в файле docker-compose.yml.

Прежде всего, вам потребуется создать пользовательскую сеть в Docker Compose, указав ее в разделе networks. Например:

version: '3'
services:
  service1:
    build: .
    networks:
      - mynetwork
  service2:
    build: .
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge

В данном примере мы создаем пользовательскую сеть с именем mynetwork.

Затем, для сервисов, которым нужен доступ к этой сети, вы можете использовать свойство networks в разделе services. Укажите имя созданной ранее сети (в нашем случае mynetwork). Например:

version: '3'
services:
  service1:
    build: .
    networks:
      - mynetwork
  service2:
    build: .
    networks:
      - mynetwork

Теперь сервисы service1 и service2 будут находиться в одной сети и смогут взаимодействовать между собой.

Однако, если вы хотите ограничить доступ только для определенных сервисов, вы можете использовать метку для сети. Метки позволяют определить, к какой сети должны присоединиться сервисы.

В данном примере у нас есть три сервиса: service1, service2 и service3. service1 и service2 должны иметь доступ друг к другу, но service3 должен быть отделен от них. Посмотрите следующий пример:

version: '3'
services:
  service1:
    build: .
    networks:
      - mynetwork
  service2:
    build: .
    networks:
      - mynetwork
  service3:
    build: .
    networks:
      - othernetwork
networks:
  mynetwork:
    driver: bridge
    labels:
      - "mynetwork=true"
  othernetwork:
    driver: bridge
    labels:
      - "mynetwork=false"

В данном примере мы создаем две пользовательские сети: mynetwork и othernetwork. Обратите внимание на свойство labels, где мы указываем, каким сервисам разрешен доступ к каждой сети.

Теперь сервисы service1 и service2 будут присоединены к mynetwork, так как имеют метку "mynetwork=true", а service3 будет присоединен к othernetwork, так как имеет метку "mynetwork=false".

Таким образом, мы разрешили доступ только для определенных сервисов в Docker Compose сети.