Docker - доступ к контейнеру только по указанным c IP - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу настроить свою сеть в Docker, которая позволяет подключаться к контейнеру только с использованием указанного c IP.

Моя проблема заключается в том, что я настроил сеть в моем docker -компонентном файле и Я могу подключиться к mysql контейнеру, например, используя MySQL Workbench с 172.28.1.2:3306, а также с 127.0.0.1:3306. Можно настроить, что я могу подключиться к этому контейнеру только с помощью 172.28.1.2:3306??

version: "3.3"

services:
    apache:
        container_name: apache
        build: ./bin/apache
        restart: always
        ports:
            - "80:80"
        networks:
            backend:
                ipv4_address: 172.28.1.1
        volumes:
            - ./wordpress/:/var/www/html/wordpress/
    mysql:
        container_name: mysql
        build: ./bin/mysql
        restart: always
        ports:
            - "3306:3306"
        networks:
            backend:
                ipv4_address: 172.28.1.2
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: wordpress
            MYSQL_USER: admin
            MYSQL_PASSWORD: admin
        volumes:
            - sql:/var/lib/mysql

networks:
    backend:
        ipam:
            driver: default
            config:
                - subnet: 172.28.0.0/16
volumes:
    sql:

Заранее спасибо за любой ответ.

1 Ответ

1 голос
/ 01 апреля 2020

Если вы удалите ports:, контейнер будет недоступен извне его указанной c Docker сети. Если вы используете одну очень конкретную c конфигурацию, в которой хост может напрямую связываться с Docker -приватными IP-адресами, вы не можете предотвратить это. (Поскольку это работает только в одной очень специфической c конфигурации, обычно их нецелесообразно указывать.)

Поэтому, если у вас есть Dockerfile:

version: "3"
services:
    apache:
        build: ./bin/apache
        restart: always
        ports:
            - "80:80"
    mysql:
        build: ./bin/mysql
        restart: always
        # no ports:
        environment: { as: above }
        volumes:
            - sql:/var/lib/mysql
volumes:
    sql:

Контейнер apache может подключаться к mysql:3306 (без директивы expose: или ports:). Хост-система может подключиться к http://localhost:80 для доступа к контейнеру apache, но не может напрямую подключиться к контейнеру mysql (если только это не хост-Linux, и вы не ищите IP-адрес вручную, не рекомендуется) , Сеть в Compose содержит дополнительную информацию о среде контейнерной сети.

...