Я пытаюсь выставить порт на Docker контейнере без необходимости сопоставлять его с портом на хосте; это прекрасно работает для sql баз данных или веб-систем, таких как redmine, где я могу получить доступ к Redmine через порт 3000 IP-адреса контейнеров из хост-системы без сопоставления порта.
Мой Dockerfile выглядит примерно так это (тома, envs, et c удалены для «ясности»)
FROM python:2.7
RUN pip install gunicorn
EXPOSE 8000
CMD ["gunicorn", "-b", "0.0.0.0:8000", "myapp.wsgi" ]
Это должно сказать gunicorn для привязки (-b) к порту 8000 или всем адресам; поэтому я ожидал, что порт 8000 будет открыт в контейнере, когда я запустил его, скажем,
docker run myappthing
Но нет - даже если ганкорн работает успешно. И все же, если я сделаю
docker run -p 127.0.0.1:8028:8000 myappthing
, то не только будет открыт порт 8028 на хосте, но и 8000 на контейнере.
Что здесь происходит; что я пропустил?
Спасибо
docker ps
порты отчетов по-разному, как показано ниже: redmine и mysql показывают, что они не сопоставлены с портом на хосте, где сопоставляется моя попытка
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b68765d57f0b 52adec2834c2 "gunicorn -b 172.18.…" 45 minutes ago Up 45 minutes 127.0.0.1:8028->8000/tcp afc-timerec-manual
aaecd3cd319d 9671544d5284 "/docker-entrypoint.…" 7 months ago Up 7 weeks 3000/tcp afc-redmine
fb4e55d352b2 1571059e8458 "docker-entrypoint.s…" 13 months ago Up 4 days 3306/tcp afc-glpi-data
Дополнительные иллюстрации: если я открою оболочку на контейнере, я могу сделать это:
lynx http://127.0.0.1:8000
lynx http://172.18.0.28:8000
(где 172.18.0.28 - IP-адрес контейнера), и обе команды позволяют мне получить доступ к веб-приложению.
Между тем, обратно на хост - порт 8000 не открыт на контейнере, поэтому lynx http://172.18.0.28:8000
завершается с ошибкой