我如何在Docker容器内的端口上运行一个简单的服务器?
(如果需要的话,这是MacOS X 10.13.6主机。)
当我运行一个简单的HTTP Server时:
python3 -m http.server 8001
该过程正确启动,并且在该端口上正确侦听(用telnet localhost 8001
确认)。
当我运行Docker容器时,它也可以正确运行进程,但是现在连接被拒绝。
web-api / Dockerfile:
FROM python:3.7
CMD python3 -m http.server 8001
docker-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拒绝连接?
答案 0 :(得分:0)
尝试telnet lorem 8001
。
您的python容器在其docker主机上的端口8001处公开,这是您SSH进入的端口(lorem)。
运行docker,docker-compose或docker-machine命令时,它将使用DOCKER_HOST
的值来确定要连接到哪个主机。我假设您的DOCKER_HOST
与lorem
具有相同的IP。