[英]Run and compile code inside a Docker container
請按照這個推理並告訴我我錯在哪里。
src
- index.ts
package.json
tsconfig.json
我想在容器內編譯和運行應用程序,這樣就不會依賴於環境。
我使用以下Dockerfile
運行docker build --name my_image
以創建圖像:
FROM node:16
WORKDIR /app
COPY package.json /app
RUN npm install
CMD ["npx", "dev"]
這將在容器內創建一個node_modules
文件夾。
現在我創建一個像這樣的容器:
docker create -v $(pwd)/src/:/app/src my_image --name my_container
我創建了一個卷,這樣當我更改主機/src
中的文件時,我也會更改容器中的相同文件。
我像這樣啟動容器:
docker start -i my_container
現在一切正常。 但是,問題在於 linter。
當我從/src
中的主機使用文本編輯器打開文件時,linter 無法正常工作,因為主機上沒有安裝node_modules
。
如果我npm install
也在主機上安裝,我將安裝 2 個不同node_modules
並且主機和容器之間可能會有一些不同的編譯。
有沒有辦法將主機node_modules
指向容器node_modules
?
如果我像這樣為node_modules
創建一個docker volume
docker create -v $(pwd)/node_modules:/app/node_modules ...
我將刪除容器中完成的所有編譯。
我究竟做錯了什么?
謝謝你。
對於那些可能有類似問題的人,這就是我所做的並且它正在工作。
首先我建立一個圖像:
docker build --name my_image .
然后我將node_modules
文件夾從臨時容器復制到我的本地文件夾:
docker create --name tmp_container my_image
docker cp tmp_container:/app/node_modules ./node_modules
docker rm tmp_container
然后我用一個卷創建最終容器:
docker create -v $(pwd)/node_modules:/app/node_modules --name my_container my_image
現在我有了它在容器中以及在我的本地文件夾中構建和編譯的內容。
這當然可以擴展到具有構建工件的任何文件夾。 例如,在我的情況下,我還需要另一個文件夾才能使 linter 在我的文本編輯器中工作。 我只是像使用node_modules
一樣復制文件夾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.