dockerfile 中的EXPOSE的含义(自问自答)

发布于 2022-09-11 22:34:30 字数 2164 浏览 20 评论 0

使用本地dockerfile构建镜像,dockerfile的内容:

FROM nginx
COPY ./index.html /usr/share/nginx/html
EXPOSE 3000

构建完成后执行:docker run -p 3000:3000 -d nginx:v0
在浏览器中输入localhost:3000,访问不到服务。
关于EXPOSE的解释,官方文档给出的是:
EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。

好想明白了,你理解的EXPOSE和权威给出的解释不是一个意思。
nginx运行的时候对外提供的端口默认是80,即便你在这里声明了3000,也不会改变默认的端口80。
这个EXPOSE毛线用都没有,一般是镜像创建者书写的,一旦写错了,就会误导用户,将人带到坑里。
因此,在声明EXPOSE的时候,一定要实现查明当前容器默认的服务端口。

怎么查nginx默认的端口呢?取nginx.config文件中去查。
首先进入到nginx容器中:docker exec -it 412a3bcbac7f /bin/bash
然后查询nginx配置文件:whereis nginx.config
进入配置文件 cd /etc/nginx 所在目录,查看nginx.config文件文件

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

没有找到端口,但是在文件尾部存在include /etc/nginx/conf.d/*.conf;
直接查看这个文件

    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

listen 80;listen 80;listen 80;listen 80;listen 80;listen 80;
自己可以去修改。默认就可以了。

既然nginx默认提供的端口是80,那么在启动docker的时候,宿主机和容器的端口映射就存在限制。
宿主机这边端口随意,只要这个端口没有被占有就可以。容器这边必须是80端口。比如我的是3000:80
在浏览器中输入http://127.0.0.1:3000就可以访问到容器提供的服务。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文