修改docker容器的埠對映(Mac版)
阿新 • • 發佈:2019-08-08
問題
檢視正在執行的mysql的docker容器埠對映情況:
$ docker container port mysql 3306/tcp -> 0.0.0.0:3306 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f29020b36c0 mysql "docker-entrypoint.s…" 16 hours ago Up 33 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
從上面兩條命令查詢結果,可知,mysql的3306埠對映到本機物理機的3306埠上面了,現在的問題是想要把mysql容器的33060埠,也對映到本機物理機到33060埠上面,即修改已經存在到容器到埠對映配置。
步驟
確定容器id
docker container inspect mysql
效果如下圖:
這裡的mysql容器ID為:5f29020b36c0971da5d50825f4132d0eaf40f1e5efaac02eadab23239ca77d7d
停止容器
$ docker stop mysql
mysql
登入docker內部的linux
cd ~/Library/Containers/com.docker.docker/Data/vms/0/
在這個目錄下面,有一個tty
的檔案,通過這個檔案我們能夠登入到docker內部的linux介面,然後使用下面命令進行登入:
screen tty
遇到空白命令列,直接回車即可。
編輯config.v2.json
cat /var/lib/docker/containers/5f29020b36c0971da5d50825f4132d0eaf40f1e5efaac02eadab23239ca77d7d/config.v2.json
具體效果如下圖:
複製這個內容,貼上到本地的文字編輯器上面,格式化進行編輯:
編輯hostconfig.json
cat /var/lib/docker/containers/5f29020b36c0971da5d50825f4132d0eaf40f1e5efaac02eadab23239ca77d7d/hostconfig.json
具體效果如下圖:
複製這個內容,貼上到本地的文字編輯器上面,格式化進行編輯:
新增一個新的33060埠對映,如下:
修改完畢之後,將修改後的json壓縮成一行,通過vi修改hostconfig.json檔案:
vi /var/lib/docker/containers/5f29020b36c0971da5d50825f4132d0eaf40f1e5efaac02eadab23239ca77d7d/hostconfig.json
內容如下:
{"Binds":["/Users/zhangyalin/Documents/databases/mysql/data:/var/lib/mysql"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3306"}],"33060/tcp":[{"HostIp":"","HostPort":"33060"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"shareable","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}
退出linux
按Ctrl+A,然後快速按D,退出screen命令。然後,使用screen -ls
命令,檢視當前會話:
$ screen -ls
There is a screen on:
31169.ttys003.zylMBP (Detached)
1 Socket in /var/folders/lb/yvhs6lhx3wz8d5mdgw4w81xr0000gn/T/.screen.
再使用kill命令殺死會話:
kill -9 31169
徹底退出會話:
screen -wipe
There is a screen on:
31169.ttys003.zylMBP (Removed)
1 socket wiped out.
No Sockets found in /var/folders/lb/yvhs6lhx3wz8d5mdgw4w81xr0000gn/T/.screen.
重啟docker desktop
一定需要重啟docker引擎,如果跳過這一個步驟就會出現hostconfig.json修改的內容被還原的問題。
重啟mysql容器
$ docker start mysql
mysql
檢查容器
$ docker container port mysql
33060/tcp -> 0.0.0.0:33060
3306/tcp -> 0.0.0.0:3306