【问题标题】:Docker process opens TCP port, but connection is refusedDocker进程打开TCP端口,但连接被拒绝
【发布时间】:2019-05-23 01:19:48
【问题描述】:

如何在 Docker 容器内的端口上运行一个简单的服务器侦听?

(如果重要的话,这是一台 MacOS X 10.13.6 主机。)

当我运行一个简单的 HTTP 服务器时:

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 上的连接被拒绝?

【问题讨论】:

  • 您正在 docker 机器内运行容器。所以获取机器的IP并尝试使用该IP。 docker-machine ls 列出和docker-machine ip <<name>>。我相信这就是为什么当你在机器内时它与 localhost 一起工作,而当你在退出后尝试时被拒绝。

标签: docker networking docker-compose


【解决方案1】:

试试telnet lorem 8001

你的 python 容器暴露在它的 docker 主机上的 8001 端口,这是你 ssh 进入的那个(lorem)。

当您运行 docker、docker-compose 或 docker-machine 命令时,它使用 DOCKER_HOST 的值来确定要连接到哪个主机。我假设您的DOCKER_HOSTlorem 具有相同的IP。

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2020-12-31
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    相关资源
    最近更新 更多