首先用以下命令启动 Docker Nginx:
sudo docker run \
--name myNginx -d -p 8888:8888 \
-v /usr/share/nginx/html:/usr/share/nginx/html \
-v /usr/share/nginx/conf:/etc/nginx/conf.d \
-v /usr/share/nginx/log:/var/log/nginx\
-v /usr/share/nginx/crt:/etc/nginx/certs\
nginx
然后查看容器信息,输出:
$sudo docker container ls --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
****ab nginx "nginx -g 'daemon off;'" 2 hours ago Up 9 minutes 80/tcp, 0.0.0.0:8888->8888/tcp myNginx
$docker inspect myNginx | grep \"Ports -A 8
"Ports": {
"8888/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8888"
}
],
"80/tcp": null
},
奇怪,明明我没有映射 80 端口喔,为何还是映射了 80 端口,COMMAND 只是 nginx -g 'daemon off;'
没有其他命令。而且容器对应的 hostconfig.json 里面根本搜不到 80 这个关键字。config.v2.json 反而能搜到,删掉后重启容器,输出还是跟上面一样,所以想请教大家以下几个问题:
docker pull nginx
而我没有这做,请问拉取不拉取有什么影响吗? 1
Takamine 2020-04-06 10:29:18 +08:00 via Android
看看你的 nginx 镜像的 DockerFile, EXPOSE 。
|
2
ZField 2020-04-06 10:37:14 +08:00 1
-p 8888:80
好像是这样吧 |
3
ZField 2020-04-06 10:39:36 +08:00
@ZField 好像答不对题了,80/tcp, 0.0.0.0:8888->8888/tcp 前面这个应该是容器内部的 nginx 的 80 端口未被映射出去,但是他有,后面这个是你自己设定的映射
|
4
stille 2020-04-06 10:59:52 +08:00
你在宿主机执行 netstat -ntlp 看看 80 端口肯定没被 docker 占用
你 grep 的命令不是在容器内执行的么?出来的结果是容器内的端口. nginx 本身默认就 80 端口,你起命令用 -p 8888:80,把 80 映射到宿主机的 8888 不就行了. |
5
jmyz0455 OP @Takamine 平时 Docker Hub 会有 DockerFile 这一页,但是 [Nginx]( https://hub.docker.com/_/nginx) 没有,请问怎么看呢?
@ZField @stille 这个默认 80 端口是为什么我还是不懂,可能我要找找 DockerFile, EXPOSE,但是把 80 映射到 8888 的确是个好方法👍 |
6
hcymk2 2020-04-06 11:30:27 +08:00
|
7
stille 2020-04-06 11:35:58 +08:00 1
@jmyz0455 EXPOSE 只是镜像作者声明这个容器用的什么端口,也就是容器内他用的是 80,你要映射到宿主机就用 -p 参数
像这种官方 docker 镜像基本都有链接到 github 的,你可以找到 dockerfile,但其他也有很多私人镜像是没有提供 dockerfile 的,这就是后话了.. |
9
acrisliu 2020-04-06 11:48:19 +08:00 1
Dockerfile 中 EXPOSE 80 了。
|
10
happypy1 2020-04-06 14:25:08 +08:00
这是因为 nginx 默认使用 80,dockerfile 也只是声明了我的 80 端口开放。
|
11
jmyz0455 OP |
12
hantsy 2020-04-10 20:35:52 +08:00
原始的 Dockerfile 里面设置的。
|