
首先用以下命令启动 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 -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 @jmyz0455 EXPOSE 只是镜像作者声明这个容器用的什么端口,也就是容器内他用的是 80,你要映射到宿主机就用 -p 参数 像这种官方 docker 镜像基本都有链接到 github 的,你可以找到 dockerfile,但其他也有很多私人镜像是没有提供 dockerfile 的,这就是后话了.. |
9 acrisliu 2020-04-06 11:48:19 +08:00 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 里面设置的。 |