我有一個反應應用程式,它創建一個構建檔案夾作為路徑/app/admin/build,我希望這個目錄作為卷共享到另一個正在運行的 nginx 容器,如下面的 docker-compose.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"
提前致謝
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
uj5u.com熱心網友回復:
我會將這些檔案包含在 Nginx 組件的自定義影像中。該COPY --from=...選項通常用于多階段構建,但您也可以命名預先存在的映像:
FROM nginx
...
COPY --from=project_admin /app/admin/build /var/www/admin/build
檢查docker images以查看 Compose 分配給構建admin映像的名稱,或放入image:Dockerfile 以自行設定。
然后在 Compose 設定中,您根本不需要volumes::
version: '3.8'
services:
admin:
build: ./admin
web:
restart: always
build: ./nginx
ports:
- '80:3000'
這里的一個特別復雜之處是 Compose 不知道一個影像可以依賴于另一個影像,因此您可能需要docker-compose build admin在啟動應用程式的其余部分之前手動進行docker-compose up --build。
通常,從影像匯出檔案很棘手。您顯示的語法將管理容器的構建目錄替換為匿名卷,然后將不相關的主機目錄安裝到 Web 容器中。有一種不同的語法涉及 Docker 命名卷,但它在其他環境(如 Kubernetes)或主機目錄中不起作用,并且它會忽略應用程式中的更新。 COPY將檔案放入映像中將是最可靠的方法;重新設計您的應用程式以避免這種情況(也許讓后端提供自己的靜態檔案)甚至更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316326.html
標籤:反应 码头工人 nginx 集装箱 docker-volume
下一篇:Docker僅在埠80上運行
