繁体   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