日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker开放的端口_docker-5-解决宿主机没有开放81端口却可以直接访问docker启动的81端口nginx容器的问题...

發布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker开放的端口_docker-5-解决宿主机没有开放81端口却可以直接访问docker启动的81端口nginx容器的问题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我以為經過前面四篇博文的學習,自己對docker的了解最起碼入門了,但是當我用docker啟動一個81端口的nginx后(宿主機:容器/81:80),在宿主機的firwall防火墻沒有添加81端口的情況下,竟然可以直接訪問成功,然后試下docker運行mysql容器用3308端口,發現也是在firwall沒有添加端口的情況下,仿佛繞過了防火墻可以直接訪問到容器,當時就懵逼了…

環境CentOS7

firewall

docker

nginx

解決流程

1、以為是docker和firewall的啟動順序問題導致的

開始我以為是因為我先啟動docker后面重啟了firewall導致firewall不能夠監控docker,然后我還美滋滋的覺得終于找到問題了。最后發現,太天真了,啟動順序完全沒影響。

2、宿主機的防火墻和docker容器的防火墻沖突

后面我想到docker也是一個輕量級的linux操作系統,也有自己的防火墻,會不會是因為docker啟動自己的防火墻后,權限級別直接繞過了宿主機的防火墻,因此百度了很多,后面按照網上的說法啟動容器的時候加上—iptables=false,這樣可能就關閉掉了容器的iptables防火墻,然而經過嘗試并沒有什么用,而且好像第二次啟動容器直接就啟動不了了,報什么iptables錯誤

3、直接修改配置文件不使用docker的iptables防火墻

因為我現在的操作系統是CentOS7,所以宿主機用的是firewall,而docker用的是iptables,百度查找說需要在文件/etc/default/docker中添加如下內容

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false"

然后我美滋滋的跟著執行,發現這個文件根本不存在,因此我又直接新建這個文件,保存,接著執行如下兩條命令重新加載文件和重啟docker

#重載

systemctl daemon-reload

#重啟docker服務

service docker restart

啟動容器,重新訪問,喵的,還是可以直接訪問,仿佛這個配置文件完全沒有用

然后直接百度,發現需要在文件/usr/lib/systemd/system/docker.service中添加如下配置,一下是我的文件

[Unit]

Description=DockerApplicationContainerEngine

Documentation=https://docs.docker.com

BindsTo=containerd.service

After=network-online.target firewalld.service containerd.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd-H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

ExecReload=/bin/kill-s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

EnvironmentFile=-/etc/default/docker

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.

# Both the old, and new location are accepted by systemd 229 and up, so using the old location

# to make them work for either version of systemd.

StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.

# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make

# this option work for either version of systemd.

StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.

# Only systemd 226 and above support this option.

TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

[Install]

WantedBy=multi-user.target

a、添加配置文件,(-代表ignore error)EnvironmentFile=-/etc/default/docker

b、在ExecStart后面添加如下內容$DOCKER_OPTS

雖然搞不懂為什么,反正接下來修改完/etc/default/docker

后重載重啟

#重載

systemctl daemon-reload

#重啟docker服務

service docker restart

重新啟動nginx容器,我的天,終于不能訪問了。

執行如下命令開啟81端口

firewall-cmd--zone=public--add-port=81/tcp--permanent

firewall-cmd--reload

我的天,終于可以訪問了,測一下docker啟動mysql的訪問,也被firewall攔截了。

真是要命的東西

結語

雖然最終解決了,但是具體原理并不是太過明了,但是最起碼docker啟動的容器再也不會繞過firewall的限制,服了。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的docker开放的端口_docker-5-解决宿主机没有开放81端口却可以直接访问docker启动的81端口nginx容器的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。