我有一个react应用程序,它创建了一个构建文件夹作为路径/app/admin/build
,我希望这个目录作为卷共享到我的docker-compose中提到的正在运行的其他nginx容器。yaml。我错过什么了吗?我想分享应用程序构建目录到nginx。然而,/var/www/admin/build
在登录到容器时被创建,但它是空的。有人能帮忙吗?
Error: *1 directory index of "/app/admin/build/" is forbidden, client: 172.18.x.x, server: _, request: "GET / HTTP/1.1", host: "localhost"
Thanks in advance
version: '3'
services:
admin:
build:
dockerfile: Dockerfile
context: ./admin
volumes:
- /app/admin/build
web:
restart: always
build:
dockerfile: Dockerfile
context: ./nginx
ports:
- '80:3000'
volumes:
- /app/admin/build:/var/www/admin/build
我会将这些文件包含在Nginx组件的自定义图像中。COPY --from=...
选项通常用于多阶段构建,但是您也可以命名一个预先存在的映像:
FROM nginx
...
COPY --from=project_admin /app/admin/build /var/www/admin/build
检查docker images
,查看Compose分配给构建的admin
映像的名称,或者将image:
放在Dockerfile中自己设置。
然后在撰写设置中,你根本不需要volumes:
:
version: '3.8'
services:
admin:
build: ./admin
web:
restart: always
build: ./nginx
ports:
- '80:3000'
这里的一个特别复杂的地方是Compose不知道一个图像可以依赖于另一个,所以您可能需要在启动应用程序的其余部分docker-compose up --build
之前手动docker-compose build admin
。一般来说,从图像导出文件是很棘手的。您展示的语法将管理容器的构建目录替换为一个匿名卷,然后将一个不相关的主机目录挂载到web容器中。有一种不同的语法涉及Docker命名的卷,但它在其他环境(如Kubernetes)或主机目录中不起作用,并且它忽略了应用程序中的更新。COPY
将文件放入图像将是最可靠的方法;重新设计应用程序以避免这种情况(可能让后端提供自己的静态文件)会更好。