记一次docker-compose端口映射后localhost通,但内网不通的问题解决方案。

问题主机参数
  • 自建的dell服务器,云服务器一般不会出现这种问题。人都给处理好了。
  • centos8、centos7 均有发生。
  • Linux localhost.localdomain 4.18.0-193.el8.x86_64 #1 SMP Fri May 8 10:59:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • docker版本:1.13 ~ 1.19 均有发生。

均有发生是因为我花了3天时间都一一尝试过了!

问题描述

docker端口映射后发现服务器localhost可以正常访问。但局域网内其他主机无法访问。
然后蛋疼的来了:
执行开放防火墙端口操作如下:

firewall-cmd --zone=public --add-port=8761/tcp --permanent
firewall-cmd --reload

没有任何效果!!真的没有任何效果!


依旧是localhost可以正常访问。但局域网内其他主机无法访问。
说的更详细点:我开放的8761端口,只有在本机访问http://127.0.0.1:8761时正常。其他机器无法通过 ip+端口 访问!!
.
然而此时端口已经通过docker-compose对外开放!!!
docker-compose截取部分配置如下:

 eureka:
    image: eureka:latest
    privileged: true
    ports:
      - "8761:8761"
    networks:
      uk:
        ipv4_address: 192.168.45.3
先说解决方案

原文如下:

Replying to my previous comment. The issue was our docker-compose specified another network ie

networks:
  default:
Therefore all our containers were not on the docker0 bridge but on a randomly generated bridge.

To fix this restructured our docker-compose.yml

networks:
  default:
  driver_opts:
  com.docker.network.bridge.name: "dockernet"
Next ran

firewall-cmd --permanent --zone=trusted --change-interface=dockernet
And worked like a charm

当然执行前先清理环境。

docker-compose stop
docker-compose rm
(如果配置了网络的话)
docker  network list
docker network rm xxx 

解决了。

这是为什么呢??????

我的 docker-compose指定了 另一个网络,所以生成的容器都在这个新建的网络上而不是 docker0上。那么让防火墙信任这个新建的网络即可。

参考文档
总结

只能说我基础不足,恶补了防火墙相关知识。也算有些收获。

### 回答1: Docker 内网穿透配置教程 (基于 Debian) 1. 安装 Docker:在 Debian 系统中安装 Docker 的方法请参考官方文档。 2. 安装 Nginx:在终端中输入以下命令安装 Nginx: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 创建 Docker 容器:使用以下命令创建一个运行在端口 8080 上的 Docker 容器: ``` sudo docker run -p 8080:80 -d nginx ``` 4. 配置 Nginx:编辑 Nginx 配置文件(/etc/nginx/sites-available/default),添加以下内容: ``` server { listen 80; server_name 你的域名; location / { proxy_pass http://你的内网 IP:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 5. 重启 Nginx:使用以下命令重启 Nginx: ``` sudo service nginx restart ``` 6. 配置防火墙:如果你的机器上安装了防火墙,请在防火墙中添加规则,允许对外访问端口 80。 7. 配置完成:这样你就可以过域名访问你的内网机器了。 ### 回答2: 基于Debian的Docker内网穿透配置教程如下: 1. 准备工作: - 安装Docker:使用apt-get命令安装Docker- 安装Docker Compose:使用pip命令安装Docker Compose。 2. 创建Dockerfile: - 在本地创建一个目录,用于存放配置文件和Dockerfile。 - 在该目录下创建一个Dockerfile,并添加以下内容: ``` FROM debian:latest ENV LC_ALL C.UTF-8 RUN apt-get update && apt-get install -y socat COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ``` 3. 创建entrypoint.sh脚本: - 在同一目录下创建一个entrypoint.sh文件,并添加以下内容: ``` #!/bin/bash socat tcp-listen:<本地端口号>,fork tcp:<目标IP地址>:<目标端口号> ``` 4. 构建Docker镜像: - 执行以下命令来构建Docker镜像: ``` docker build -t tunnel . ``` 5. 启动Docker容器: - 执行以下命令来启动Docker容器,并将本地端口映射到容器内部的端口: ``` docker run -d -p <本地端口号>:<容器内部端口号> tunnel ``` 6. 进行内网穿透测试: - 在本地访问`localhost:<本地端口号>`,将会使用内网穿透将请求转发到目标IP地址的目标端口号。 过上述步骤,你可以配置基于Debian的Docker内网穿透。请确保替换相关的占位符,如本地端口号、目标IP地址和端口号,以满足你的实际需求。 ### 回答3: 基于Debian的Docker内网穿透配置教程如下: 1. 首先,确保你的Debian系统已经安装了Docker。可以过运行以下命令进行检查: ``` docker --version ``` 2. 安装并配置代理服务器。我们使用Nginx作为代理服务器。运行以下命令进行安装: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 修改Nginx的配置文件。打开Nginx的默认配置文件: ``` sudo nano /etc/nginx/sites-available/default ``` 4. 在配置文件的server节中添加以下内容,用于指定端口转发: ``` location / { proxy_pass http://localhost:8000; // 将8000端口替换成你实际使用的端口 } ``` 5. 保存配置文件并重启Nginx服务: ``` sudo service nginx restart ``` 6. 运行你的Docker容器,并暴露你想要的端口。假设你要将容器的80端口映射到主机的8000端口,你可以使用以下命令运行容器: ``` docker run -p 8000:80 <image> ``` 其中,`<image>`是你要运行的Docker镜像。 7. 现在,你的Docker容器的端口已经映射到了主机的8000端口。由于配置了Nginx代理服务器,因此你可以使用主机的IP地址和8000端口访问Docker容器。 总结: 过以上步骤,你可以在Debian系统上配置Docker内网穿透。过Nginx代理服务器,你可以将Docker容器的端口映射到主机的指定端口,从而可以过主机的IP地址和指定端口访问Docker容器。这样,你就可以在内网环境中方便地访问Docker容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值