2016-12-23 4 views
0

Приведенный ниже пример относится к docker-composedocs.Как выставить в сети?

С моей точки зрения, они хотят иметь redis порт 6379, который можно приобрести в контейнере web.

Почему они не имеют

expose: 
    - "6379" 

в redis контейнере?

version: '2' 
services: 
    web: 
    build: . 
    ports: 
    - "5000:5000" 
    volumes: 
    - .:/code 
    networks: 
     - front-tier 
     - back-tier 
    redis: 
    image: redis 
    volumes: 
     - redis-data:/var/lib/redis 
    networks: 
     - back-tier 

ответ

1

От official Redis image:

Это изображение включает в себя ПОДВЕРГАТЬ 6379 (порт REDIS), поэтому стандартный контейнер связывание сделает его автоматически доступны для связанных контейнеров (как иллюстрируют следующие примеры).

который в значительной степени типичный способ делать вещи.

Redis Dockerfile.

1

Вам больше не нужны ссылки, которые мы назначаем контейнерам для сетей докеров. И без привязки, если вы не публикуете все порты с docker run -P, нет никакой ценности, чтобы разоблачить порт в контейнере. Контейнеры могут разговаривать с любым портом, открытым в любом другом контейнере, если они находятся в одной сети (при условии настроек по умолчанию для ICC), поэтому разоблачение порта становится noop.

Обычно вы открываете порт через файл Docker в качестве индикатора для запуска вашего изображения или используете флаг -P. Есть также некоторые проекты, которые смотрят на открытые порты других контейнеров, чтобы знать, как с ними разговаривать, особенно я думаю о nginx-прокси, но это уникальный случай.

Однако издательство порт делает этот порт доступен из Докер хоста, которое всегда должно быть сделано из Докер-compose.yml или выполнить команду (вы не хотите авторов изображений, способных повлиять на Docker хозяина без какой-либо формы подтверждения локального администратора). Когда вы публикуете конкретный порт, его сначала не нужно открывать.

Смежные вопросы