---
# System prepended metadata

title: 關閉centos防火牆，外部Windows仍是無法訪問docker容器
tags: [Dokcer, centos, linux]

---

# 錯誤說明
(以下為windows示意外部訪問nginx服務，訪問失敗)
![image](https://hackmd.io/_uploads/BkSiY8NLa.png =80%x)

## 前情提要
用VM建立了1個cnetOS7環境，在centOS裡安裝Docker，用Docker創建nginx服務(containerName=mn)，
然而，進入Dokcer容器，用`curl`可以訪問服務
![image](https://hackmd.io/_uploads/BJG_7_HL6.png =80%x)
但是，在宿主機centOS，用`curl`無法訪問nginx服務，
```sh
[root@localhost ~]# curl http://192.168.216.129
```
![image](https://hackmd.io/_uploads/rkJoguS8a.png =80%x)


## 原因:
```sh
brctl show

## 如果显示无指令 则使用以下命令下载
yum install -y bridge-utils
```
![image](https://hackmd.io/_uploads/ryhADIVI6.png)
如果该图上显示 8000.00000000000 以及无挂载容器，可能是网桥出现问题

# 解決方式
1. 停止 docker 守护进程
    ```sh 
    systemctl stop docker
    ```
1. 然后添加网桥br0
    ```sh 
    ip addr add 172.16.0.1/24 dev br0
    ```
1. 启用网桥br0
    ```sh
    ip link set dev br0 up
    ```
1. 修改docker默认网桥
    ```sh
    vim /etc/docker/daemon.json

    {
        "bridge":"br0"
    }
    ```
1. 启动 docker 守护进程
    ```sh
    # docker 守护进程在启动的时候可以自动去配置网络设置
    systemctl start docker
    ```
1. 重新查看网桥
    ```sh
    brctl show
    ```
    ![image](https://hackmd.io/_uploads/ByRHTPrLT.png)
1. 可以看到新建的网桥成功挂在了容器，也可以成功访问Nginx了
![image](https://hackmd.io/_uploads/SJcTTwBLa.png)

> 參考資料：
> - [解决CentOS中docker容器无法被物理机访问](https://blog.csdn.net/warneraop/article/details/124829995) **<font color=magenta>(主要解法)</font>**
> - [centos7 docker 宿主机不能访问容器问题解决](https://blog.csdn.net/u013258447/article/details/115750332)
> - [docker 网络配置重置](https://www.cnblogs.com/oloroso/p/14080722.html)