[英]CSS: How can I keep the element after an unordered list from starting on a new line?
[英]How to keep compiled files after starting a docker container with volume mounted?
我有一個多階段構建的圖像,用於編譯一些文件並將它們復制到我的最終圖像中。
我還在主機上的應用程序目錄和容器內設置了一個卷。
但是當我啟動容器時,編譯的文件不在這里。 據我了解卷是如何工作的,它非常有意義:容器用主機上目錄的內容替換他的目錄的內容,編譯文件不會生成,因為它們是由容器在構建時生成的。
但是我想知道是否有一種方法可以在容器啟動時保持音量並將編譯后的文件放在容器中。 我認為我做錯了。
為了向您提供有關我的需求的更多信息,我想從.scss
圖像中的 .scss 編譯.css
文件,並將編譯后的.css
復制到我的應用程序 docker 圖像的/app/<my_app>/static/css/
文件夾中。
這是我的項目結構:
- docker-compose.yml
- production.env
- web/
- - Dockerfile
- - build/
- - - scss/
- - app/
- - - <my_app>/
- - - - static/
- - - - - css/
docker-compose.yml
version: '3'
services:
web:
build: web/
ports:
- "5000:5000"
env_file:
- ./production.env
volumes:
- ./web/app:/app
Dockerfile
FROM node:alpine as builder
WORKDIR /build
COPY build/ .
RUN npm install && mkdir -p css
RUN npm run scss # Compile .scss files to .css into /build/css/ folder
FROM python:alpine
WORKDIR /app
COPY app/ .
COPY --from=builder /build/css ./<my_app>/static/css
/* ... Some instructions ... */
CMD flask run
在這里,當我構建容器時,css 文件還不存在,它們被編譯,復制到最終圖像。 當我啟動圖像時,由於./web/app:/app 之間有一個卷,圖像的內容被主機中的內容替換,因此缺少.css 文件。
卷安裝僅在運行時發生; 在構建Dockerfile
之后。
在構建容器映像時,卷安裝不會應用於容器映像。
Dockerfile
中的 eg WORKDIR /app
假設在構建映像時python:alpine
構建步驟中存在(或創建) /app
。 看起來這是在Dockerfile
和隨后的COPY /app.
什么也沒做。
/app
volume mount 會在鏡像構建完成后用於創建容器時應用。
最后我自己找到了解決方案,所以我把答案貼在這里希望它能幫助別人。
我放棄了多階段構建並嘗試創建一個專門用於 scss 編譯的圖像。
這是這張圖片的Dockerfile
:
FROM node:alpine
WORKDIR /build
COPY package.json ./
RUN mkdir -p ./scss ./css
RUN npm install
CMD npm run scss
請注意,我使用模塊 node-sass 在 nodejs 環境中編譯 scss。
現在,它只是從scss/
編譯文件並將 output 放入css/
。 但是這些文件夾中還沒有任何內容。
我編輯我的docker-compose.yml
以在開始時運行這個新圖像,並將我應用程序的 static 文件夾中的兩個卷設置到這個名為scss
的新圖像容器中的scss/
和css/
文件夾。 因此,當web
啟動時,這個新服務將使用static/scss
中的文件作為源來填充static/css
。
version: '3'
services:
web:
build: web/
ports:
- "5000:5000"
depends_on:
- scss
env_file:
- ./production.env
volumes:
- ./web/app:/app
scss:
build: scss/
env_file:
- ./production.env
volumes:
- ./web/app/<my_app>/static/css:/build/css
- ./web/app/<my_app>/static/scss:/build/scss
最后,它起作用了。
運行$ docker-compose up -d
后,這里有 css 個文件。 scss
圖像的容器沒有運行,因為它是一個一次性命令,而不是一個正確的服務運行,但是如果你對你的.scss
文件做了一些更改並且你想再次編譯.css
,你可以再次運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.