要禁止通过 IP 地址加端口访问 Docker 容器,同时只允许通过域名访问,可以采取以下方法: 方法 1:限制 Docker 容器的监听地址 在 Docker 运行容器时,通过指定 --publish 参数的绑定地址,限制容器只绑定到本地回环地址(localhost),这样外部就无法直接通过 IP 和端口访问。 示例: bash 复制代码 docker run -d --name my_container -p 127.0.0.1:80:80 my_image 这样容器内部的 80 端口只会监听在 127.0.0.1 上,不会暴露到外部网络,只能通过反向代理进行访问。 使用 Nginx 等反向代理工具,通过域名代理访问这个 Docker 容器的本地地址。 方法 2:在 Nginx 配置中限制 IP 访问 在 Nginx 配置文件中可以设置只允许特定的 Host(域名)访问。例如,可以在 Nginx 的 server 配置中添加: nginx 复制代码 server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:80; # Docker容器的本地地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 拒绝 IP 地址直接访问 if ($host !~* ^(example\.com)$ ) { return 403; } } 这里的 example.com 是你希望通过的域名,其他 IP 或不符合的 Host 将返回 403 禁止访问。 方法 3:使用防火墙策略 如果你的服务器上有防火墙(如 iptables 或 firewalld),可以设置规则,只允许特定的 IP 访问 Docker 的端口,这样可以确保 Docker 端口仅通过反向代理或特定 IP 访问。
这样就只能本机访问 8081,然后再用 nginx 或 caddy 等反代 8081 即可
这样最简单
要禁止通过 IP 地址加端口访问 Docker 容器,同时只允许通过域名访问,可以采取以下方法:
方法 1:限制 Docker 容器的监听地址
在 Docker 运行容器时,通过指定 --publish 参数的绑定地址,限制容器只绑定到本地回环地址(localhost),这样外部就无法直接通过 IP 和端口访问。
示例:
bash
复制代码
docker run -d --name my_container -p 127.0.0.1:80:80 my_image
这样容器内部的 80 端口只会监听在 127.0.0.1 上,不会暴露到外部网络,只能通过反向代理进行访问。
使用 Nginx 等反向代理工具,通过域名代理访问这个 Docker 容器的本地地址。
方法 2:在 Nginx 配置中限制 IP 访问
在 Nginx 配置文件中可以设置只允许特定的 Host(域名)访问。例如,可以在 Nginx 的 server 配置中添加:
nginx
复制代码
server {
listen 80;
server_name example.com;
}
这里的 example.com 是你希望通过的域名,其他 IP 或不符合的 Host 将返回 403 禁止访问。
方法 3:使用防火墙策略
如果你的服务器上有防火墙(如 iptables 或 firewalld),可以设置规则,只允许特定的 IP 访问 Docker 的端口,这样可以确保 Docker 端口仅通过反向代理或特定 IP 访问。
别开外网端口 然后域名反代127.0.0.1:某某端口
127.0.0.1:port + 外启动个nginx代理
没法直接禁止,只能前置加一层nginx,容器只监听本地,暴露nginx的端口,在nginx限制只能域名访问。
@Oganneson #3 公网ip端口别开就行 域名正常80端口绑定公网ip然后映射内网127.0.0.1对应服务的占用端口
使用nginx转发,把真正的端口映射关闭。nginx只允许域名,网上一搜一大把。
Nginx反代时用docker所在ip+端口号,比如172.17.0.1+端口号。
至于关闭ip+端口访问,看这篇文章:ufw-docker
@vlvie #7 我觉得是正解。