我在PORTS条目的docker container ls列上获得了这个值(Nginx所提供的react应用程序的容器):
PORTS
80/tcp, 0.0.0.0:40000->40000/tcp, :::40000->40000/tcp我知道第二部分是IPv4映射,第三部分是IPv6。我不明白80/tcp的含义,但我认为这才是使应用程序能够从互联网上访问的真正原因,因为如果我使用"80:80“映射,它就会工作,但现在使用"40000:40000”就不行了。
我的项目有这样一个结构,所以它可以一次构建多个项目:
|
|- client (a React app)
| |- Dockerfile-client
|- .env.prod
|- docker-compose.ymldocker-compose.yml看起来如下所示:
version: '3.7'
services:
client:
build:
dockerfile: ./client/Dockerfile-client
context: ./ # so the .env.prod file can be used by React
container_name: client
env_file:
- .env.prod # enabled to apply CLIENT_PORT var to Dockerfile-client
ports:
- "${CLIENT_PORT}:${CLIENT_PORT}"
# others所有变量都是在.env.prod中定义的(CLIENT_PORT为40000),我运行compose .env.prod up这样的命令,不会带来错误。
下面是构建客户端容器的Dockerfile:
# build env
FROM node:13.13-alpine as build
WORKDIR /app
COPY ./client/package*.json ./
RUN npm ci
COPY ./client/ ./
COPY ./.env.prod ./
RUN mv ./.env.prod ./.env
RUN npm run build
# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE ${CLIENT_PORT}
CMD ["nginx", "-g", "daemon off;"]如果映射为"80:80",一切都会很好,但我的问题是,当文件中没有"80“时,ls输出中的ls是如何出现的呢?可能是因为Nginx?
发布于 2022-09-14 15:21:49
80/tcp来自nginx,默认情况下,nginx在此端口上侦听。
在这种情况下,正确的端口映射将是4000:80
或
如果希望nginx侦听其他端口(如4000 ),请将nginx.conf文件中的listen参数更新到该端口。
http {
server {
listen 4000;
}
}然后使用端口映射作为4000:4000
https://stackoverflow.com/questions/73719274
复制相似问题