Docker容器添加端口映射
小布丁 2021-10-12 Docker
一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 这里是将容器内的80端口映射到宿主机的8088端口
docker run -it -d --name [container-name] -p 8088:80 [image-name]
1
参数说明
- -d 表示后台运行容器
- -t 为docker分配一个伪终端并绑定到容器的标准输入上
- -i 是让容器的标准输入保持打开状态
- -p 指定映射端口
在运行容器时指定映射端口运行后,如果想要添加新的端口映射,可以使用以下两种方式:
# 方式一
将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口 大概过程如下:
- 先停止现有容器
- 将容器commit成为一个镜像
- 用新镜像运行容器
docker stop container-name
docker commit container-name new-image-name
docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-image-name
1
2
3
4
5
2
3
4
5
# 方式二
修改要端口映射的容器的配置文件
- 先停止现有容器
- 查询当前容器的详细信息
- 修改 hostconfig.json 和 config.v2.json文件:
- **重新起停运docker **
docker stop container-name
docker inspect container-name/container-id
# 根据输出的信息 找到 ResolvConfPath 配置文件所在的文件路径
cd ResolvConfPath 进入到配置文件所在的目录
ls -l
-rw-r----- 1 root root 0 Jan 18 16:57 7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52-json.log
drwx------ 2 root root 4096 Jan 18 16:57 checkpoints
-rw------- 1 root root 2762 Jan 18 16:57 config.v2.json # 修改这个
-rw-r--r-- 1 root root 1472 Jan 18 16:57 hostconfig.json # 修改这个
-rw-r--r-- 1 root root 13 Jan 18 16:57 hostname
-rw-r--r-- 1 root root 174 Jan 18 16:57 hosts
drwx-----x 2 root root 4096 Jan 18 16:57 mounts
-rw-r--r-- 1 root root 128 Jan 18 16:57 resolv.conf
-rw-r--r-- 1 root root 71 Jan 18 16:57 resolv.conf.hash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# **hostconfig.json **
PortBindings 增加 端口健值映射
{
"PortBindings": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
},
{
"HostIp": "::",
"HostPort": "80"
}
],
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
},
{
"HostIp": "::",
"HostPort": "8080"
}
],
"8081/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8081"
},
{
"HostIp": "::",
"HostPort": "8081"
}
],
"8082/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8082"
},
{
"HostIp": "::",
"HostPort": "8082"
}
],
"8083/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8083"
},
{
"HostIp": "::",
"HostPort": "8083"
}
]
},
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# config.v2.json
{
"StreamConfig": {},
"State": {
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"RemovalInProgress": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-01-18T08:57:51.335378334Z",
"FinishedAt": "2022-01-19T03:22:03.692522289Z",
"Health": null
},
"ID": "7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52",
"Created": "2022-01-18T08:57:50.90676763Z",
"Managed": false,
"Path": "/bin/bash",
"Args": [],
"Config": {
"Hostname": "7fbfb452ebba",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
// 这里需要添加一个对外导出的 端口键值
"ExposedPorts": {
"80/tcp": {},
"8080/tcp": {},
"8081/tcp": {},
"8082/tcp": {},
"8083/tcp": {}
},
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos:latest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"NetworkSettings": {
"Bridge": "",
"SandboxID": "7e4b2c2623026d05007134d09ccc63213dfefb31027cbae59bb592fd2855c670",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "5b48be743009b3f1ea4451b3a25ad4f6c1937e603cc32c8d3ceac5635185ce55",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null,
"IPAMOperational": false
}
},
"Service": null,
#这里需要更改一下
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
},
{
"HostIp": "::",
"HostPort": "80"
}
],
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
},
{
"HostIp": "::",
"HostPort": "8080"
}
],
"8081/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8081"
},
{
"HostIp": "::",
"HostPort": "8081"
}
],
"8082/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8082"
},
{
"HostIp": "::",
"HostPort": "8082"
}
],
"8083/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8083"
},
{
"HostIp": "::",
"HostPort": "8083"
}
]
},
"SandboxKey": "/var/run/docker/netns/7e4b2c262302",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"IsAnonymousEndpoint": false,
"HasSwarmEndpoint": false
},
"LogPath": "/var/lib/docker/containers/7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52/7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52-json.log",
"Name": "/demo-contos",
"Driver": "overlay2",
"OS": "linux",
"MountLabel": "",
"ProcessLabel": "",
"RestartCount": 0,
"HasBeenStartedBefore": true,
"HasBeenManuallyStopped": true,
"MountPoints": {},
"SecretReferences": null,
"ConfigReferences": null,
"AppArmorProfile": "",
"HostnamePath": "/var/lib/docker/containers/7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52/hostname",
"HostsPath": "/var/lib/docker/containers/7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52/hosts",
"ShmPath": "",
"ResolvConfPath": "/var/lib/docker/containers/7fbfb452ebbae52aa9c0f1e548135bbccda3abacf4c57f8b450fe5dd3d639b52/resolv.conf",
"SeccompProfile": "",
"NoNewPrivileges": false,
"LocalLogCacheMeta": {
"HaveNotifyEnabled": false
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
systemctl stop docker.service
systemctl start docker.service
docker start container-name
1
2
3
4
5
2
3
4
5