然后是一个特殊的命令dev:docker or docker:debug:start:local,它允许我们将本地存储库挂载到 Docker 的/app文件夹中,(如上所述)是WORKDIR我们的应用程序代码被复制的文件夹。
dev:docker # alias for docker:debug:start:local
docker:build
docker:start # Starts the image and app from container's `dist` folder
docker:stop
docker:debug:start # Starts image without running the app
docker:debug:start:local # Same as above but mounts local filesystem
docker:debug:enter # Allows us to connect terminal inside running container
可用于调试docker,但也可用于与平台无关的开发。在已部署的环境中,映像本身设置为运行npm run start:prod(请参阅DockerfileCMD)。docker:所有以package.json为前缀的命令都从未使用过,它们是为了在本地环境中简化对 docker 的控制。
dev:docker # alias for docker:debug:start:local
docker:build
docker:start # Starts the image and app from container's `dist` folder
docker:stop
docker:debug:start # Starts image without running the app
docker:debug:start:local # Same as above but mounts local filesystem
docker:debug:enter # Allows us to connect terminal inside running container
PS:对于 docker 内部的本地开发,请使用 trio dev:docker, docker:debug:enter, npm run dev. 参见下文。
你可以,我需要将单个包添加到现有的 docker 以使我的 Python 应用程序工作并且不想等待构建时间。
然后通过
参考:https ://levelup.gitconnected.com/keep-docker-container-running-for-debugging-fc2dfa39472c
所以最后,这就是我所做的:
首先,要知道容器在运行任何命令之前是可以暂停的,例如
npm start
,等等。然后我们可以使用终端进入 docker 容器并手动运行任何命令。像这样运行应用程序不会在出现严重错误时退出并关闭容器。我们甚至可以在 docker 中挂载本地文件系统并从那里运行应用程序,同时 docker 实时获取更改 -非常适合调试!项目布局
在我的特殊情况下,它是一个带有两个重要文件夹的 NestJS 应用程序
/src
- 应用程序源代码(开发,nest start --watch
)/dist
- 构建应用程序的输出文件夹(生产)(
npm run build
(nest build
),npm run start:prod
(node dist/src/main
))然后将 docker 配置为将构建的
/dist
文件夹和相关文件复制到一个/app
文件夹,该文件夹用作WORKDIR
随后启动应用程序的位置。摘自
Dockerfile
(简化了很多)明白了这一点,现在让我们来看看
package.json
"scripts"
解释
所以,上面发生的事情是我们有命令来构建应用程序
build
,开始开发或生产start:dev
start:prod
,启动和停止 dockerdocker:start
docker:stop
,启动 docker pauseddocker:debug:start
,使用终端输入 dockerdocker:debug:enter
,..然后是一个特殊的命令
dev:docker
ordocker:debug:start:local
,它允许我们将本地存储库挂载到 Docker 的/app
文件夹中,(如上所述)是WORKDIR
我们的应用程序代码被复制的文件夹。在 Docker 中调试
dev:docker
- 以暂停状态启动 docker 容器 (pause infinity
) 并安装本地 repodocker:debug:enter
- 这允许我们通过终端进入容器内部npm run dev
然后我们可以从 docker 内部手动运行应用程序以下是我们的实际摘录
README.md
:Docker 内部开发
可用于调试docker,但也可用于与平台无关的开发。在已部署的环境中,映像本身设置为运行
npm run start:prod
(请参阅DockerfileCMD
)。docker:
所有以package.json为前缀的命令都从未使用过,它们是为了在本地环境中简化对 docker 的控制。PS:对于 docker 内部的本地开发,请使用 trio
dev:docker
,docker:debug:enter
,npm run dev
. 参见下文。构建镜像
启动容器并
sleep
sleep
在运行应用程序之前暂停容器,这使我们即使在出现终止错误的情况下也可以检查它。有两种选择:
a) 运行在容器中构建 的完整包。这将运行文件夹中的代码(请参阅Dockerfile命令)。
dist
CMD
b)或使用已安装的本地 repo运行。这将用您本地 repo 的内容完全覆盖容器的
/app
目录,对 repo 的每次更改都将反映在 docker 内部。*注意
%var%
是windows语法,$var
在unix上使用。连接到容器
从第二个终端启动此命令。
然后,在容器内,您可以
a) 从
dist
. 这与 docker 在 Dockerfile 中使用的命令相同CMD
。b) 从 开始
src
。(使用时docker:debug:start:local
。)此时,您可以运行任何命令,因为您已链接完整的本地存储库。
在浏览器 http://localhost:9002/api/v1/ 中打开应用程序并执行您的操作。
停止容器
提示:您可以检查正在运行的容器。
以正常方式启动应用程序以验证一切正常并在 http://localhost:9002/api/v1/ 上的浏览器中进行测试。
PS:您可能需要重建图像 1)。