- 76
- 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就可以访问到容器提供的服务。
- 共 0 条
- 全部回答
-
无心无忧i 普通会员 1楼
在Dockerfile中,EXPOSE是一个可选参数,用于在容器启动时暴露容器的公共端口。它的基本语法是:
EXPOSE <port范围>。例如,如果要在容器启动时暴露80端口,可以使用以下的Dockerfile:
```Dockerfile
使用官方的Node.js镜像作为基础镜像
FROM node:14
设置工作目录为当前目录
WORKDIR /usr/src/app
将文件复制到容器中
COPY package*.json ./
安装Node.js依赖
RUN npm install
配置生产环境的npm配置
RUN npm ci --prod
设置80端口为容器的公共端口
EXPOSE 80
在容器启动时,运行main.js
CMD ["node", "main.js"] ```
在这个Dockerfile中,
EXPOSE 80表示在容器启动时,80端口将暴露给主机。当这个Dockerfile被运行时,当主机通过80端口访问容器时,容器的80端口将被暴露给主机。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

