Arhn - архитектура программирования

Контейнеры Docker в реальной жизни

Я следил за учебными пособиями и пару дней экспериментировал с Docker, но не могу найти ни одного примера использования «реального мира».

Как я могу общаться с моим контейнером извне?

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

Разве весь смысл таких контейнеров не в том, что по крайней мере 1 из них должен быть доступен снаружи?

Я нашел инструмент под названием pipework (https://github.com/jpetazzo/pipework), который, вероятно, помогите мне с этим. Но тот ли это инструмент, который все тестируют Docker для производства, который они используют?

Нужен ли «хак», чтобы снаружи поговорить с моим контейнером?



Ответы:


1

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

Например:

  sudo docker run -p80:8080 ubuntu bash

Привяжет порт 8080 вашего контейнера к порту 80 хост-компьютера.

Следовательно, вы можете получить доступ к своему контейнеру извне, используя URL-адрес хоста:

  http://you.domain -> losthost:80 -> container:8080

Это то, что вы хотели сделать? Или может я что-то пропустил

(Параметр -expose предоставляет порт только другим контейнерам (не хосту))

03.02.2014
  • да, я тоже так думал, что должно работать. Но порт на хосте доступен только на самом хосте. Вы не можете получить к нему доступ с другого компьютера. blog.codeaholics.org/2013/ описывает проблему более подробно. 03.02.2014
  • В этой статье в какой-то момент парень обращается к хосту извне: curl -X POST -H Content-Type: application/json -d '{имя: Альберт Эйнштейн, день рождения: 14.03.1879}' 10.2.0.10:8080 03.02.2014
  • Pipework, кажется, используется только для предоставления реальных IP-адресов контейнеру. Это другой вариант использования 03.02.2014
  • Поскольку я уже правильно использовал параметр -p в прошлом, я должен спросить, может ли это быть ваш хост, к которому есть проблемы с доступом извне? Работает ли это со стандартными услугами? 03.02.2014
  • Я догадывался, что у моего хоста тоже были проблемы. Я попытался использовать nc для прослушивания того же порта и смог подключиться. Netstat действительно показывает, что докер протокола прослушивает как ipv6, однако я не знаю, является ли это проблемой. Похоже, у других также есть проблема с ipv6 (serverfault.com/questions/545379/) 03.02.2014
  • Это настоящий позор :( Однако, пока они не исправили ошибку, некоторые люди нашли временное решение: github .com/dotcloud/docker/issues/2174 (последнее сообщение). Вы пробовали это? 03.02.2014
  • да, я пробовал -p 0.0.0.0:8080:8080 один раз.. Но это тоже не сработало. Может быть, это был просто мой тест. Я попробую еще немного позже сегодня :) 03.02.2014
  • Удачи! Мне любопытно узнать, исправите ли вы это. Это выглядит как довольно раздражающий баг. 03.02.2014
  • Спасибо .. Это не только раздражает, но и как это может не заботить больше людей? Неужели вся шумиха вокруг Docker, все люди, пробующие его, используют его только на одном хосте и используют локальный хост для тестирования? Возможно, в некоторых системах ошибка возникает только время от времени. Позже я обновлю этот вопрос тем, что найду :) 03.02.2014
  • Теперь я пробовал другую версию -p 0.0.0.0:8888:80 и, используя свой IP-адрес сервера, пытался подключиться по телнету с локального хоста (работает все время), а затем с другой машины в локальной сети (никогда не работал). nc на хост-сервере и telneting к нему всегда работает. Я также вижу пакеты, попадающие в -t nat (chain DOCKER) для моего контейнера. Но оттуда ничего не попадает.. :( 03.02.2014
  • Черт, нашел проблему .. Некоторые правила пересылки iptables все еще активны из-за интерфейса vpn .. Добавление -A FORWARD -i em1 -o docker0 -j ACCEPT, чтобы iptables решил мою проблему .. :) 03.02.2014
  • Сладкий! рад вот этому 03.02.2014
  • @AurélienThieriot - ваша интерпретация синтаксиса EXPOSE неверна. EXPOSE 80 8080 предоставляет два порта, 80 и 8080, из контейнера. Это не управляет портами, где они выставлены на хосте. Только оператор (== лицо, выполняющее docker run) может решить, как сопоставить порты с хостом, но не разработчик (== кто выполняет docker build). Используйте docker port или docker ps, чтобы увидеть сопоставление хоста с портами контейнера. 04.02.2014
  • О, да! Спасибо за это :) Я отредактирую, чтобы избежать ошибок. 04.02.2014

  • 2

    Это (https://blog.codecentric.de/en/2014/01/docker-networking-made-simple-3-ways-connect-lxc-containers/) сообщение в блоге объясняет проблему и решение.

    По сути, похоже, что конвейеры (https://github.com/jpetazzo/pipework) — это способ выставляйте контейнерные порты наружу на данный момент... Надеюсь, это скоро будет интегрировано..

    Update: В данном случае виноват был iptables, и было правило, которое блокировало пересылаемый трафик. Добавление -A FORWARD -i em1 -o docker0 -j ACCEPT решило это..

    03.02.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..