Docker Nginx 为何会默认映射 80 端口?如何修改端口映射?

2020-04-06 10:25:56 +08:00
 jmyz0455

首先用以下命令启动 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 反而能搜到,删掉后重启容器,输出还是跟上面一样,所以想请教大家以下几个问题:

  1. Docker Nginx 为何会默认映射 80 端口?
  2. 如何修改 Docker Nginx 的端口映射?
  3. 很多教程第一步是 docker pull nginx 而我没有这做,请问拉取不拉取有什么影响吗?
  4. hostconfig.json 和 config.v2.json 的区别是什么?很多文章说两个都要修改,但是搜不到原因。
6956 次点击
所在节点    Docker
12 条回复
Takamine
2020-04-06 10:29:18 +08:00
看看你的 nginx 镜像的 DockerFile, EXPOSE 。
ZField
2020-04-06 10:37:14 +08:00
-p 8888:80
好像是这样吧
ZField
2020-04-06 10:39:36 +08:00
@ZField 好像答不对题了,80/tcp, 0.0.0.0:8888->8888/tcp 前面这个应该是容器内部的 nginx 的 80 端口未被映射出去,但是他有,后面这个是你自己设定的映射
stille
2020-04-06 10:59:52 +08:00
你在宿主机执行 netstat -ntlp 看看 80 端口肯定没被 docker 占用
你 grep 的命令不是在容器内执行的么?出来的结果是容器内的端口.
nginx 本身默认就 80 端口,你起命令用 -p 8888:80,把 80 映射到宿主机的 8888 不就行了.
jmyz0455
2020-04-06 11:18:51 +08:00
@Takamine 平时 Docker Hub 会有 DockerFile 这一页,但是 [Nginx]( https://hub.docker.com/_/nginx) 没有,请问怎么看呢?

@ZField @stille 这个默认 80 端口是为什么我还是不懂,可能我要找找 DockerFile, EXPOSE,但是把 80 映射到 8888 的确是个好方法👍
hcymk2
2020-04-06 11:30:27 +08:00
stille
2020-04-06 11:35:58 +08:00
@jmyz0455 EXPOSE 只是镜像作者声明这个容器用的什么端口,也就是容器内他用的是 80,你要映射到宿主机就用 -p 参数

像这种官方 docker 镜像基本都有链接到 github 的,你可以找到 dockerfile,但其他也有很多私人镜像是没有提供 dockerfile 的,这就是后话了..
ZField
2020-04-06 11:39:33 +08:00
@jmyz0455 = =你可以进容器内部,查一下 nginx 的配置,甚至修改,不过这就有点违背 docker 的本来作用了
acrisliu
2020-04-06 11:48:19 +08:00
Dockerfile 中 EXPOSE 80 了。
happypy1
2020-04-06 14:25:08 +08:00
这是因为 nginx 默认使用 80,dockerfile 也只是声明了我的 80 端口开放。
jmyz0455
2020-04-06 16:50:15 +08:00
@hcymk2 链接很有用,非常感谢。
@happypy1 @acrisliu @ZField @stille DockerFile 里写得很清晰,是我之前不会找,谢谢回答。
hantsy
2020-04-10 20:35:52 +08:00
原始的 Dockerfile 里面设置的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX