gpt4 book ai didi

node.js - 我的 docker 容器在哪个端口上运行着 React 应用程序? Reacts 的默认 PORT 或来自 Dockerfile 的 EXPOSE?

转载 作者:行者123 更新时间:2023-12-02 20:33:17 27 4
gpt4 key购买 nike

我是 Docker 的新手,所以如果我说的有任何错误,请纠正我。

我创建了一个 React 应用程序并在根存储库中编写了以下 Dockerfile:

# pull official base image
FROM node:latest

# A directory within the virtualized Docker environment
# Becomes more relevant when using Docker Compose later
WORKDIR /usr/src/app

# Copies package.json and package-lock.json to Docker environment
COPY package*.json ./

# Installs all node packages
RUN npm install

# Copies everything over to Docker environment
COPY . .

# Uses port which is used by the actual application
EXPOSE 8080

# Finally runs the application
CMD [ "npm", "start" ]

我的目标是以某种方式运行 docker 图像,以便我可以在我的浏览器中(使用本地主机)打开 React 应用程序。因为在 Dockerfile 中,我将应用程序暴露给端口:8080。我想我可以运行:

docker run -p 8080:8080 -t <name of the docker image>

但显然应用程序可以通过容器中的 3000 访问,因为当我运行时:

docker run -p 8080:3000 -t <name of the docker image>

我可以使用 localhost:8080 访问它。

当容器中运行的服务可以通过不同的端口访问时,Dockerfile 中的 EXPOSE 端口有什么意义?将 NodeJS 应用程序容器化时,我是否始终必须确保我的应用程序中的 process.env.PORT 与 Dockerfile 中的 EXPOSE 相同?

最佳答案

EXPOSE用于告诉 docker 应用程序内部的哪些端口可以被暴露。如果您不在内部使用这些端口(容器 -> 主机),则没有任何意义。

EXPOSE使用 docker run -P -t <name of the docker image> 时非常方便(-P 大写 P)让 Docker 自动将所有暴露的端口发布到主机上的随机端口(尝试一下。然后运行 ​​docker psdocker inspect <containerId> 并检查输出)。

因此,如果您的 Web 服务器(React 应用程序)在端口 3000(在容器内)上运行,您应该 EXPOSE 3000 (而不是 8080)以与 Docker API 正确集成。

关于node.js - 我的 docker 容器在哪个端口上运行着 React 应用程序? Reacts 的默认 PORT 或来自 Dockerfile 的 EXPOSE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63579358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com