在docker run創建並運行容器的時候,可以通過-p指定端口映射規則。但是,我們經常會遇到剛開始忘記設置端口映射或者設置錯了需要修改。當docker start運行容器后並沒有提供一個-p選項或設置,讓你修改指定端口映射規則。那么這種情況我們該怎么處理呢?今天Docker君教你如何修改運行中的docker容器的端口映射?
方法一:刪除原有容器,重新建新容器
這個解決方案最為簡單,把原來的容器刪掉,重新建一個。當然這次不要忘記加上端口映射。
優缺點:優點是簡單快捷,在測試環境使用較多。缺點是如果是數據庫鏡像,那重新建一個又要重新配置一次,就比較麻煩了。
方法二:修改容器配置文件,重啟docker服務
容器的配置文件路徑:
-
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
其中的hashofthecontainer是docker鏡像的hash值,可以通過docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出來)
[root@ecs-5286 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f8511e56585f gitlab/gitlab-ce:latest "/assets/wrapper" 8 months ago Up 16 hours (healthy) 0.0.0.0:10022->22/tcp, 0.0.0.0:8080->80/tcp, 0.0.0.0:10443->443/tcp gitlab-ce [root@ecs-5286 ~]# [root@ecs-5286 ~]# [root@ecs-5286 ~]# cat /var/lib/docker/containers/f8511e56585fdd68d4bb5ad57250d829bac52626d722305a43dec1e5cf18406c/hostconfig.json {"Binds":["/srv/gitlab/logs:/var/log/gitlab","/srv/gitlab/data:/var/opt/gitlab","/srv/gitlab/config:/etc/gitlab"],"ContainerIDFile":"","LogConfig":{"Type":"journald","Config":{}},"NetworkMode":"default","PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"10022"}],"443/tcp":[{"HostIp":"","HostPort":"10443"}],"80/tcp":[{"HostIp":"","HostPort":"10080"}]},"RestartPolicy":{"Name":"always","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":[],"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"docker-runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0} [root@ecs-5286 ~]#
按需修改端口, 按需修改掛載目錄(權限和屬主屬組要相同),然后重啟docker服務,再啟動容器服務就可以了。
systemctl restart docker
優缺點:這個方法的優點是沒有副作用,操作簡單。缺點是需要重啟整個docker服務,如果在同一個宿主機上運行着多個容器服務的話,就會影響其他容器服務。