2
2
3
3
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 ` -P ` 或 ` -p ` 参数来指定端口映射。
4
4
5
- 当使用 ` -P ` 标记时,Docker 会随机映射一个 ` 49000~49900 ` 的端口到内部容器开放的网络端口 。
5
+ 当使用 ` -P ` 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口 。
6
6
7
- 使用 ` docker container ls ` 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面 。
7
+ 使用 ` docker container ls ` 可以看到,本地主机的 32768 被映射到了容器的 80 端口。此时访问本机的 32768 端口即可访问容器内 NGINX 默认页面 。
8
8
9
9
``` bash
10
- $ docker run -d -P training/webapp python app.py
10
+ $ docker run -d -P nginx:alpine
11
11
12
12
$ docker container ls -l
13
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14
- bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155- > 5000 /tcp nostalgic_morse
13
+ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14
+ fae320d08268 nginx:alpine " /docker-entrypoint.… " 24 seconds ago Up 20 seconds 0.0.0.0:32768- > 80 /tcp bold_mcnulty
15
15
```
16
16
17
- 同样的,可以通过 ` docker logs ` 命令来查看应用的信息 。
17
+ 同样的,可以通过 ` docker logs ` 命令来查看访问记录 。
18
18
19
19
``` bash
20
- $ docker logs -f nostalgic_morse
21
- * Running on http://0.0.0.0:5000/
22
- 10.0.2.2 - - [23/May/2014 20:16:31] " GET / HTTP/1.1" 200 -
23
- 10.0.2.2 - - [23/May/2014 20:16:31] " GET /favicon.ico HTTP/1.1" 404 -
20
+ $ docker logs fa
21
+ 172.17.0.1 - - [25/Aug/2020:08:34:04 +0000] " GET / HTTP/1.1" 200 612 " -" " Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0" " -"
24
22
```
25
23
26
24
` -p ` 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ` ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort ` 。
27
25
28
26
## 映射所有接口地址
29
27
30
- 使用 ` hostPort:containerPort ` 格式本地的 5000 端口映射到容器的 5000 端口,可以执行
28
+ 使用 ` hostPort:containerPort ` 格式本地的 80 端口映射到容器的 80 端口,可以执行
31
29
32
30
``` bash
33
- $ docker run -d -p 5000:5000 training/webapp python app.py
31
+ $ docker run -d -p 80:80 nginx:alpine
34
32
```
35
33
36
34
此时默认会绑定本地所有接口上的所有地址。
@@ -40,43 +38,42 @@ $ docker run -d -p 5000:5000 training/webapp python app.py
40
38
可以使用 ` ip:hostPort:containerPort ` 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
41
39
42
40
``` bash
43
- $ docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
41
+ $ docker run -d -p 127.0.0.1:80:80 nginx:alpine
44
42
```
45
43
46
44
## 映射到指定地址的任意端口
47
45
48
- 使用 ` ip::containerPort ` 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。
46
+ 使用 ` ip::containerPort ` 绑定 localhost 的任意端口到容器的 80 端口,本地主机会自动分配一个端口。
49
47
50
48
``` bash
51
- $ docker run -d -p 127.0.0.1::5000 training/webapp python app.py
49
+ $ docker run -d -p 127.0.0.1::80 nginx:alpine
52
50
```
53
51
54
52
还可以使用 ` udp ` 标记来指定 ` udp ` 端口
55
53
56
54
``` bash
57
- $ docker run -d -p 127.0.0.1:5000:5000 /udp training/webapp python app.py
55
+ $ docker run -d -p 127.0.0.1:80:80 /udp nginx:alpine
58
56
```
59
57
60
58
## 查看映射端口配置
61
59
62
60
使用 ` docker port ` 来查看当前映射的端口配置,也可以查看到绑定的地址
63
61
64
62
``` bash
65
- $ docker port nostalgic_morse 5000
66
- 127 .0.0.1:49155.
63
+ $ docker port fa 80
64
+ 0 .0.0.0:32768
67
65
```
68
66
69
67
注意:
70
- * 容器有自己的内部网络和 ip 地址(使用 ` docker inspect ` 可以获取所有的变量 ,Docker 还可以有一个可变的网络配置。)
68
+ * 容器有自己的内部网络和 ip 地址(使用 ` docker inspect ` 查看 ,Docker 还可以有一个可变的网络配置。)
71
69
72
70
* ` -p ` 标记可以多次使用来绑定多个端口
73
71
74
72
例如
75
73
76
74
``` bash
77
75
$ docker run -d \
78
- -p 5000:5000 \
79
- -p 3000:80 \
80
- training/webapp \
81
- python app.py
76
+ -p 80:80 \
77
+ -p 443:443 \
78
+ nginx:alpine
82
79
```
0 commit comments