首页 > 解决方案 > 无法使用 IP 地址访问本地 docker 容器

问题描述

我在我的 Mac 系统上本地运行一个 docker 容器。我在这篇文章的底部粘贴了 Dockerfile 的内容。我在图像中暴露了端口 8888,我想使用 container-ip-address:8888 从我的主机浏览器访问 python 程序。但是,它没有连接。将其映射到本地主机上的端口是可行的,但我不想这样做。我该如何解决这个问题?(已经尝试创建一个 docker 网络并将容器作为新网络的一部分运行 - 没有骰子)。任何帮助将非常感激。Dockerfile 内容 -

FROM python:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY . /usr/src/app

EXPOSE 8888
RUN pip install tornado
CMD ["python", "./api.py" ]

标签: dockercontainersip-address

解决方案


Expose 只是告诉 docker 这个容器将与这个端口一起工作。它没有映射到任何地方。 https://docs.docker.com/engine/reference/builder/#expose

映射是运行容器的代码的任务。如果是本地机器,它是一个 docker。如果您不映射端口,docker run则无法从 docker 网络外部访问容器。同时您的主机不在 docker 网络中。如果您手动创建 docker 网络,情况也是如此 - 您的机器只是无法访问它的内部部分。

换句话说,你必须选择你的方式:

  • -p ....在执行 docker run 时使用(本地开发)
  • 如果您使用 docker composer(主要是本地开发),或者在 docker compose 文件中定义它。当您在 docker 中运行多个通信系统时,这种方法非常有用。
  • 或者,如果您使用解决方案进入 Kubernetes(使用 Orchestrator/autoscaler 等进行生产),则通过生产环境中的 Kubernetes yaml 定义文件来完成。

推荐阅读