Для ограничения доступа между контейнерами в сети docker-compose можно использовать ограничения сети, а также настройки правил доступа на уровне контейнеров.
1. Ограничения сети:
- Создайте отдельную сеть для ваших контейнеров в файле docker-compose.yml:
```yaml
version: '3'
services:
app:
...
networks:
- my_network
db:
...
networks:
- my_network
web:
...
networks:
- my_network
web2:
...
networks:
- my_network
networks:
my_network:
```
- Добавьте ограничения сети для каждого сервиса в файле docker-compose.yml:
```yaml
version: '3'
services:
app:
...
networks:
my_network:
aliases:
- app
db:
...
networks:
my_network:
labels:
- "com.docker.network.access_policy=container:app"
web:
...
networks:
my_network:
labels:
- "com.docker.network.access_policy=container:db"
web2:
...
networks:
my_network:
labels:
- "com.docker.network.access_policy=container:app"
networks:
my_network:
```
- В данном примере контейнер "web" имеет доступ к контейнеру "db" (указано в labels), а контейнер "web2" имеет доступ только к контейнеру "app" (указано в labels).
2. Настройка правил доступа на уровне контейнеров:
- Добавьте правила доступа в конфигурацию контейнера "db" в файле docker-compose.yml:
```yaml
version: '3'
services:
db:
...
security_opt:
- "label:com.docker.network.access_policy=container:app"
```
- В данном примере контейнер "db" имеет доступ только к контейнеру "app".
Примечание: Данный подход ограничивает доступ между контейнерами только на уровне сети, что означает, что если вы запустите другие контейнеры, они могут получить доступ к другим контейнерам в сети. Если вам нужно ограничить доступ более точно, можно использовать более сложные подходы, например, настройку файервола внутри контейнера "web2".