docker - Docker 撰写 nginx 映像为什么如果未配置则公开端口
问题描述
version: "3"
services:
nginx:
image: nginx:latest
restart: always
server:
image: nginx:alpine
restart: always
apache:
image: nginx:alpine
restart: always
这是我的docker-compose.yml
,port
没有设置,但在浏览器上,如果我键入IPAddress
可以访问“欢迎使用 Nginx”的每个服务,¿为什么?¿ 是因为版本?这不是错误,我想知道为什么如果每个示例和文档都说You must to expose port with -p argument on command or ports on docker-compose file or otherwise you will not be able to access
,我误解了什么?
docker ps
aef0386dfafe nginx:alpine "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp example-app_server_1
a03465500eb7 nginx:alpine "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp example-app_apache_1
b6e150e35678 nginx:alpine "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp example-app_nginx_1
忽略使用 nginx 的服务名称“apache”。
解决方案
作为实现细节,每个容器都有一个 Docker 内部 IP 地址。原则上,您可以直接访问它,但前提是 (a) 如果您与容器位于同一主机或同一虚拟机上,(b) 主机或虚拟机正在运行本机 Linux,并且 (c) 您是在容器之外或在同一个 Docker 网络中。您似乎处于那种确切的特定情况,在这种情况下,直接调用该 IP 地址将起作用。
正如您所注意到的,到达容器的正确方法是为您需要访问的任何容器设置ports:
(not )。expose:
然后,从同一主机和容器外,您可以调用localhost
和第一个ports:
号码;从不同的主机,您可以使用主机的 DNS 名称或 IP 地址和发布的端口。如果 Docker 在 VM 中运行(或者如果您使用的是较旧的 Docker Toolbox 设置),那么您可以调用 VM 的 IP 地址。此设置将在所有主机操作系统中始终如一地工作。
推荐阅读
- android - View Binding extension function
- excel - 如果本月修改,如何查看文件夹中的所有文件?
- android - 构建 APK 时出错 - Android Studio
- python - 气流远程 PythonOperator
- flutter - Flutter Getx 如何将 obs 绑定到 Widget?
- aws-lambda - 使用无服务器同步 RPC 微服务
- python - 104,连接被对等方重置。发送多个长 http post 请求时
- python - 将 Json 格式字符串转换为链接{"link":"https://i.imgur.com/zfxsqlk.png"}
- c++ - Qt5 标签更改文本显示损坏
- javascript - 在 Typescript 中解构函数参数