docker - 无法使用 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" ]
解决方案
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 定义文件来完成。
推荐阅读
- r - R - writeOGR 中的错误 - NULL 未知数据类型
- mysql - 如何从多个模式中的每个表中获取最大列值?
- python - 当我将 writerow 与 CSV 文件一起使用时删除一个空行
- maven - Maven - 如何创建一个将文件放在根目录中的 POM
- google-analytics - 谷歌分析 - 自定义维度发送到错误网站的谷歌分析
- python - 如何制作正确的设置文件?
- python - Python lib NetworkX:未充分利用 CPU
- python - 我在使用旨在根据列类别拆分 Excel 的 Python 脚本时遇到错误
- python - 尝试在不使用“in”运算符的情况下为代码执行 python 并且它不起作用
- protocol-buffers - 如何使用 grpcurl 使用客户端流式 gRPC 分块上传图像