簡體   English   中英

在 Docker 容器內運行和編譯代碼

[英]Run and compile code inside a Docker container

請按照這個推理並告訴我我錯在哪里。

  • 我想用 Typescript 開發一個 web 應用程序。 這是文件夾結構:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM