[英]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.