问题描述 投票:0回答:1

问题是在构建应用程序之后存在容器,并且无法再扫描它。除了Nginx以外,我还可以使用哪种生产方法,我在Docker-Compose中使用了哪种生产方法,并且它也可以代理到后端。 我想到的一种解决方案是使用小型HTTP服务器服务构建文件,然后使用NGINX将其逆转代理,但我不知道这是否是生产环境中的好习惯。

watchtower
    

Compose的普遍期望是,

FROM node:23.7.0-slim AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM node:23.7.0-slim AS serve WORKDIR /app RUN npm install -g http-server COPY --from=build /app/dist /app/dist EXPOSE 3000 CMD ["http-server", "dist", "-p", "3000"]
是不立即退出的长期运行的事情。  您会设置一项撰写服务,例如,但不是
services:

Multi阶段的构建并不总是在Docker中,并且您显示的设置试图通过Compose运行仅构建容器,这是您在旧设置中可能会发现的一个解决方法。  您在第二个示例中显示的多阶段构建 - 
npm run start

在较早的阶段,然后将构建的应用程序置于更小的图像中,可以使用它 - 是一种标准方法,如果您确实需要为此运行一个容器,那是一个完全正常的生产准备设置。 (我可能会使用

npm run build

服务器而不是节点和
RUN npm run build
软件包,但基本上是同一设置。)
reactjs docker docker-compose dockerfile
1个回答
0
投票
这与watch望塔的作用有点分开。 重要的区别在于,您是从本地代码中删除应用程序的,因此,如果您想要新版本的新版本,则可以自己。 如果将图像推到注册表

COPY
然后,当您的CI系统将新图像推向注册表时,Watchtower会自动将其拉动并重新创建容器。
我还会补充说,此设置中没有
nginx
。  您的代码和库堆栈完全包含在图像中。  特别是对于节点应用程序,
http-server

树周围有一些常见的黑客攻击,但是这些导致代码存储在Docker卷中,这将优先于图像中的内容。 如果您的音量安装在

build:

上,并且Watchtower拔出了较新的图像,则可以从卷中获取旧模块树,而不是图像中的更新。  您通常不想要这种行为。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.