首页 > 解决方案 > 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.ymlport没有设置,但在浏览器上,如果我键入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”。

标签: dockernginxdocker-compose

解决方案


作为实现细节,每个容器都有一个 Docker 内部 IP 地址。原则上,您可以直接访问它,但前提是 (a) 如果您与容器位于同一主机或同一虚拟机上,(b) 主机或虚拟机正在运行本机 Linux,并且 (c) 您是在容器之外或在同一个 Docker 网络中。您似乎处于那种确切的特定情况,在这种情况下,直接调用该 IP 地址将起作用。

正如您所注意到的,到达容器的正确方法是为您需要访问的任何容器设置ports:(not )。expose:然后,从同一主机和容器外,您可以调用localhost和第一个ports:号码;从不同的主机,您可以使用主机的 DNS 名称或 IP 地址和发布的端口。如果 Docker 在 VM 中运行(或者如果您使用的是较旧的 Docker Toolbox 设置),那么您可以调用 VM 的 IP 地址。此设置将在所有主机操作系统中始终如一地工作。


推荐阅读