Как запустить простой сервер, прослушивающий порт внутри контейнера Docker?
(Если это имеет значение, то это хост MacOS X 10.13.6.)
Когда я запускаю простой HTTP-сервер:
python3 -m http.server 8001
процесс запускается правильно, и он правильно прослушивает этот порт (подтверждается telnet localhost 8001
).
Когда я запускаю контейнер Docker, он также правильно запускает процесс, но теперь в соединении отказано.
Веб-апи / Dockerfile:
FROM python:3.7
CMD python3 -m http.server 8001
докер-compose.yaml:
version: '3'
services:
web-api:
hostname: web-api
build:
context: ./web-api/
dockerfile: Dockerfile
expose:
- "8001"
ports:
- "8001:8001"
networks:
- api_network
networks:
api_network:
driver: bridge
Когда я запускаю контейнер (ы), он запускает HTTP-сервер:
$ docker-compose up --detach --build
Building web-api
[…]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1db4cd1daaa4 ipsum_web-api "/bin/sh -c 'python3…" 8 minutes ago Up 8 minutes 0.0.0.0:8001->8001/tcp ipsum_web-api_1
$ docker-machine ssh lorem
docker@lorem:~$ ps -ef | grep http.server
root 12883 12829 0 04:40 ? 00:00:00 python3 -m http.server 8001
docker@lorem:~$ telnet localhost 8001
[connects successfully]
^D
docker@lorem:~$ exit
$ telnet localhost 8001
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
Что настроено здесь неправильно, так что сервер работает внутри контейнера Docker; но я получаю Отказ в соединении через порт 8001 при подключении из за пределами контейнера на его открытый порт?