在没有运行容器服务的情况下,在Docker容器中同步本地代码

我创build了一个具有可执行节点js应用程序的docker镜像。

我有多个独立于自己的模块。 这些模块使用npm link命令作为npm link内部的包创build,因此可以在我的节点js索引文件中使用。

目录结构是

 |-node_modules |-src |-app |-index.js |-independent_modules |-some_independent_task |-some_other_independent_task 

在构build映像时,我已经为根node_modules中的每个独立模块创build了npm link 。 这将在每个独立的模块内创build一个node_modules文件夹,而不存在于本地。 这只在容器内部创build。

我需要这些模块在src/app/index.js并继续我的任务。

这个docker镜像不使用服务器来保持容器运行,因此容器在过程结束时停止。

我使用build立图像

 docker build -t demoapp 

要在开发环境中运行index.js,我需要将本地src目录挂载到docker src目录,以反映更改而不重build映像。

安装和运行我使用命令

 docker run -v $(pwd)/src:/src demoapp node src/index.js 

这里的问题是,在本地,没有安装依赖关系,即没有node_modules文件夹存在。 因此,在将本地目录安装到docker中时,将其replace为空的,因此在node_modules安装的依赖关系在node_modules消失了。

我试图使用.dockerignore不装载node_modules文件夹,但它没有工作。 而且,在本地保留空的node_modules也是行不通的。

我也尝试使用docker-compose来保持卷同步,并node_modules隐藏了node_modules ,但是我认为这只在node_modules与任何服务器运行时同步,即docker容器保持运行。

这是我用的docker-compose.yml

 # docker-compose.yml version: "2" services: demoapp_container: build: . image: demoapp volumes: - "./src:/src" - "/src/independent_modules/some_independent_task/node_modules" - "/src/independent_modules/some_other_independent_task/node_modules" container_name: demoapp_container command: echo 'ready' environment: - NODE_ENV=development 

我在这里读到,使用它会跳过`node_modules同步。

但是这也不适合我。

我需要在一个已停止的docker容器中每次执行这个index.js,同时将本地代码同步到node_modules workdir并跳过dependencies文件夹(即node_modules

还有一件事情,如果可能发生将有所帮助。 每次我做docker-compose updocker-compose run它打印准备好了。 我可以拥有一些东西,我可以用CLI传递的命令覆盖docker-compose中的命令。

docker-compose run | {some command} docker-compose run | {some command}

您已经定义了一个docker-compose文件,但实际上并没有使用它。 既然你使用docker run ,这是你应该尝试的命令:

 docker run \ -v $(pwd)/src:/src \ -v "/src/independent_modules/some_independent_task/node_modules" -v "/src/independent_modules/some_other_independent_task/node_modules" demoapp \ node src/index.js 

如果要使用docker-compose,则应将command更改为node src/index.js 。 然后,你可以使用docker-compose up而不是整个docker run ....