目錄
- 前言
- 方式一 簡單粗暴
- 方式二 細水長流
前言
一般在運行容器時,我們都會通過參數 -p(使用大寫的-P參數則會隨機選擇宿主機的一個端口進行映射)來指定宿主機和容器端口的映射,例如
docker run -itd -p 本地端口:容器內端口 所用鏡像名
參數說明
- -d 表示后臺運行容器
- -t 為docker分配一個偽終端并綁定到容器的標準輸入上
- -i 是讓容器的標準輸入保持打開狀態
- -p 指定映射端口
即創建容器時,你可以設置一個端口來進行宿主機和容器之間端口的映射,比如外邊的8080與容器內的22進行映射后,那你可以使用 宿主機IP:8080 在xshell進行連接容器了
在這里我是創建了一個Centos容器,內部創建一個Hadoop的偽分布式集群,想要在瀏覽器打開HDFS的網站進行查看數據,所以想要給容器加個端口映射,下面就是我實操成功的方法,希望能夠幫到正在閱讀的讀者。
方式一 簡單粗暴
直接給現在容器停了(當然你要不想停也可以,只是打包會慢一點,當然我是沒出意外,如果你怕出現特殊情況,那就先把容器停了),然后把這個容器打包成鏡像,然后使用這個鏡像開啟新的容器,開啟的時候加上你想新添加的端口將現有的容器打包成鏡像,然后在使用新的鏡像運行容器時重新指定要映射的端口
實操如下:
停止容器 docker stop 容器名字或者編號 將容器打包成鏡像 docker commit 容器名字或者編號 你想起的鏡像名字 用新鏡像開啟新容器 docker run -itd --name 你起的容器名 -p 外邊的端口:容器內端口 -p 外邊的端口:容器內的端口... 剛才的鏡像名
方式二 細水長流
修改要容器的配置文件,這樣就不需要每次想要添加端口映射,就得重新創建一邊容器了
若該容器還在運行,先停掉 docker stop 容器ID 停掉docker服務 systemctl stop docker 查看容器信息: docker ps -a 查看容器的端口映射情況,在容器外執行: docker port 容器ID或者容器名稱 查找要修改容器的容器Id(當然你也可以直接通過docker ps -a查看) docker inspect 容器Id | grep Id 進到/var/lib/docker/containers 目錄下找到與 Id 相同的目錄,修改 hostconfig.json 和 config.v2.json文件: cd /var/lib/docker/containers/容器Id vim hostconfig.json 外部端口是10000,容器內部端口是50070 "50070/tcp": [{"HostIp": "","HostPort": "10000"}]
vim config.v2.json
這兩個文件在寫入的時候都建議寫在原有端口的后面,我當時是寫在前面了,但是不知道為啥就一直不生效,可能是先掃描已經配置過的端口的原因把
重新啟動docker systemctl start docker 查看端口是否綁定成功 docker ps -a 當然你也可以用這個命令來查看宿主機和容器之間的端口是否映射成功 netstat -an | grep 宿主機的映射端口 如果有進程存在則表示有映射
同理,你也可以通過這種方式來刪除添加錯誤的端口