Переадресация портов Docker с использованием localhost - PullRequest
0 голосов
/ 10 мая 2018

У меня есть служба memcached, работающая на порту 11211 в контейнере Docker, и я хочу получить доступ к этой службе из другого контейнера, используя 127.0.0.1:11211.Я использую docker-compose, и мне кажется, что ничего из "links", "ports" или "expose" не работает.Я не хочу иметь доступ к IP-адресу контейнера документирования memcached, вместо этого я хочу получить к нему доступ, так как это был локальный сервис другого контейнера.Есть ли решение?

Спасибо!

version: '2'
services:
  memcached:
    build: ./memcached
    image: memcached_img
    expose:
      - "11211"
  web:
    build: .
    image: app:latest
    mem_limit: 512m
    ports:
      - "3000:3000"
    command: [ "script/startup.sh", "web" ]
  worker:
    build: .
    image: app:latest
    mem_limit: 512m
    command: [ "script/startup.sh", "worker" ]

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Создать Docker Network для связи между контейнерами

version: '2'
services:
  memcached:
    build: ./memcached
    image: memcached_img
    expose:
      - "11211"
    networks:
      - web-network
  web:
    build: .
    image: app:latest
    mem_limit: 512m
    ports:
      - "3000:3000"
    command: [ "script/startup.sh", "web" ]
    networks:
      - web-network
  worker:
    build: .
    image: app:latest
    mem_limit: 512m
    command: [ "script/startup.sh", "worker" ]
networks:
   web-network:
      driver: bridge

Теперь вы можете "обращаться" к сервисам, используя их имена.Например, вы можете получить доступ к сервису memcached из веб-сервиса, используя memcached:11211 как хост: порт

0 голосов
/ 10 мая 2018

Во-первых, вам нужно изменить Memcache conf, чтобы разрешить соединение с другими хостами

 go to /etc/memcached.conf:
 change -l 127.0.0.1 to -l 0.0.0.0 # or simply comment it out

build build.

в вашем файле docker-compose

services:
  memcache:
    ports:
      - host_port: docker_service_port
0 голосов
/ 10 мая 2018

localhost внутри контейнера - это отдельная изолированная сеть. Не локальный хост хоста.

Вы можете добавить depends_on: memcached в веб-контейнер. Это добавит хост memcached в контейнер web, и вы сможете пинговать этот хост оттуда. Докер позаботится о переадресации портов. Он также запустит веб только после того, как memcached уже запущен. Тогда вы могли бы telnet memcached 11211 из web.

0 голосов
/ 10 мая 2018

Вы можете использовать 'expose XXXX' в Dockerfile или использовать -p при первом запуске контейнера.
Нам будет очень полезно помочь вам, если вы предоставите свой Dockerfile, из которого создан ваш образ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...