gpt4 book ai didi

Docker:在容器 IP 上公开端口

转载 作者:行者123 更新时间:2023-12-02 19:50:07 26 4
gpt4 key购买 nike

我试图在 Docker 容器上公开一个端口,而不必将其映射到主机上的端口;这适用于 sql 数据库或 web 系统(如 redmine),我可以在不映射端口的情况下从主机系统访问容器 IP 地址的端口 3000 上的 Redmine。

我的 Dockerfile 看起来像这样(为“清晰”而删除了卷、环境等)

FROM python:2.7

RUN pip install gunicorn

EXPOSE 8000

CMD ["gunicorn", "-b", "0.0.0.0:8000", "myapp.wsgi" ]

这应该告诉 gunicorn 将 (-b) 绑定(bind)到端口 8000 或所有地址;所以当我运行它时,我希望端口 8000 在容器上打开
docker run myappthing

但是没有——即使是 unicorn 也在快乐地奔跑。然而,如果我这样做
docker run -p 127.0.0.1:8028:8000 myappthing

那么不仅主机上的 8028 端口是开放的,容器上的 8000 也是开放的。

这里发生了什么;我错过了什么?

谢谢
docker ps报告端口不同,如下所示:redmine 和 mysql 显示它们未映射到我的尝试被映射的主机上的端口
CONTAINER ID        IMAGE               COMMAND                   CREATED             STATUS              PORTS                      NAMES
b68765d57f0b 52adec2834c2 "gunicorn -b 172.18.…" 45 minutes ago Up 45 minutes 127.0.0.1:8028->8000/tcp afc-timerec-manual
aaecd3cd319d 9671544d5284 "/docker-entrypoint.…" 7 months ago Up 7 weeks 3000/tcp afc-redmine
fb4e55d352b2 1571059e8458 "docker-entrypoint.s…" 13 months ago Up 4 days 3306/tcp afc-glpi-data

更多插图:如果我在容器上打开一个外壳,我可以这样做:
lynx http://127.0.0.1:8000
lynx http://172.18.0.28:8000

(其中 172.18.0.28 是容器 IP 地址),这两个命令都允许我访问 webapp。

同时,回到主机 - 容器上的 8000 端口未打开,因此 lynx http://172.18.0.28:8000失败

最佳答案

未使用 EXPOSE 发布端口指令,您需要使用 -p .

https://docs.docker.com/engine/reference/builder/#expose

The EXPOSE instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published. To actually publish the port when running the container, use the -p flag on docker run to publish and map one or more ports, or the -P flag to publish all exposed ports and map them to high-order ports.

关于Docker:在容器 IP 上公开端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com