如何在Docker容器中调试Node.js应用程序

如何在Docker容器中调试Node.js应用程序

简介

自古以来,虫子就在困扰着人类。在那个时候,它们产生了不同的疾病,但今天的bug是程序中的逻辑错误。有时这些也是开发者的噩梦。在这篇文章中,我们将学习如何在Docker容器上创建一个Node.js应用程序,以及如何将调试器附加到Node应用程序中。

什么是调试

调试只不过是解决Node.js应用程序代码中的问题或错误。这个应用程序可能会在执行所有给它的任务时遇到困难。调试有助于抚平Node.js应用程序的所有这些路径。这最终有利于终端用户和公司。

在Ubuntu Linux上安装Node.js

按照以下步骤,在Ubuntu机器上安装Node.js

$sudo apt update
$sudo apt upgrade

现在安装nodejs

$sudo apt install nodejs

要安装节点软件包管理器,请使用以下命令。

$sudo apt install npm

使用npx创建一个NodeJS应用程序

下面我们有一个创建节点应用程序的逐步指南。这里提到了一些先决条件,让你知道我们所处的环境。

  • Ubuntu Linux

  • 已安装的节点

第1步:创建一个目录

创建一个名为 “debug “的目录,并将该目录改成它。

$mkdir debug
$cd debug

检查你是否在正确的目录内。

$pwd

输出

/home/hemant/debug

第2步:创建节点应用程序

这里我们将使用npx为我们创建一个全功能的Node.js应用程序。

示例

$npx create-react-app my_react_app

输出

npx: installed 16 in 294.361s

Creating a new React + Express app in /home/hemant/debug/my_react_app.

Installing packages. This might take a couple of minutes.

> core-js@2.6.12 postinstall
/home/hemant/debug/my_react_app/node_modules/babelruntime/node_modules/core-js

> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
> nodemon@1.19.4 postinstall
/home/hemant/debug/my_react_app/node_modules/nodemon

> node bin/postinstall || exit 0
 ╭───────────────────────────────────────────────────────────────╮
 │                                                               │
 │ New major version of npm available! 6.14.17 -> 9.2.0          │
 │ Changelog: https://github.com/npm/cli/releases/tag/v9.2.0     │
 │ Run npm install -g npm to update!                             │
 │                                                               │
 ╰────────────────────────────────────────────────────────────

使用npm创建一个NodeJS应用程序

要在你的系统上实现这项任务,必须在机器上安装NodeJS和npm。按照下面的步骤,准备好目录结构。所有的数据都在一个名为 “debug_node “的目录内创建。

第1步:创建一个文件app.js

将以下代码粘贴到app.js文件中。

const express = require('express');
const app = express()
app.get('/', (req, res) => res.send('HELLO TUTORIALSPOINT'));
app.listen(3000, () => {
   console.log('THE LOG OUTUPUT: PORT 3000')
})

第2步:使用npm进行初始化

$npm init

这将创建package.json文件。

第3步:安装express

现在我们需要快速安装。

示例

$npm install --save express

输出

npm WARN config global `--global`, `--local` are deprecated. Use `-- location=global` instead.
added 57 packages in 8m
7 packages are looking for funding
   run `npm fund` for details

在package.json文件的scripts部分内添加start命令。编辑之后,package.json的代码看起来像这样。

{
   "name": "node_docker",
   "version": "1.0.0",
   "description": "",
   "main": "app.js",
   "scripts": {
      "start": "node app.js",
      "test": "echo "Error: no test specified" && exit 1"
   },
   "author": "",
   "license": "ISC",
   "dependencies": {
      "express": "^4.18.1"
   }
}

第4步:运行应用程序

示例

$npm run start

输出

npm WARN config global `--global`, `--local` are deprecated. Use `-- location=global` instead.
> node_docker@1.0.0 start
> node app.js
THE LOG OUTUPUT: PORT 3000

该应用程序成功地在localhost:3000上运行。

如何在Docker容器中调试Node.js应用程序?

容器化的节点应用程序

第1步:创建一个Docker文件

下面的dockerfile将被用来构建一个带有node应用程序的node容器。把这个文件命名为Dockerfile,它应该和package.json在同一级别上出现。

#use the node:9-slim as the base image.
FROM node:9-slim
#set the working directory inside the container.
WORKDIR /app
#copy all the requirements to the working directory.
COPY package.json /app
#install the dependencies
RUN npm install
COPY . /app/
#start the server.
CMD ["npm", "start"]

第2步:建立图像

示例

$docker build -t node-test .

输出

[+] Building 2.5s (10/10) FINISHED
=> [internal] load build definition from Dockerfile
0.0s
=> => transferring dockerfile: 339B
0.0s
=> [internal] load .dockerignore
0.0s
=> => transferring context: 2B
0.0s
=> [internal] load metadata for docker.io/library/node:9-slim
1.9s
=> [internal] load build context
0.2s
=> => transferring context: 27.97kB
0.1s
=> [1/5] FROM docker.io/library/node:9-
slim@sha256:288b29c1925d65b2d7d8701f8ada201 0.0s
=> CACHED [2/5] WORKDIR /app
0.0s
=> CACHED [3/5] COPY package.json /app
0.0s
=> CACHED [4/5] RUN npm install
0.0s
=> [5/5] COPY . /app/
0.1s
=> exporting to image
0.1s
=> => exporting layers
0.1s
=> => writing image
sha256:4614d7eb74e7d5e6a1aa1ef5bf7953b53102ee4969d72a0f8d6d12c 0.0s
=> => naming to docker.io/library/node-test
0.0s

第3步:运行该容器

$docker run -itd -p 5001:3000 --name node_container node-test
Output:
b87849ca86fb490e1e2209b1112f6dc6c4a9158bc2c352239ea0127effddf284

检查容器是否在localhost:5001上运行。

如何在Docker容器中调试Node.js应用程序?

将VScode调试器附加到容器上

为了实现NodeJS应用程序的调试器,我们需要在与我们的node应用程序相同的文件夹中创建一个docker-compose文件。

第1步:创建docker-compose文件

创建一个文件docker-compose.yml并粘贴以下代码。

version: '3'
services:
   node_app:
      build: .
      ports:
         - 5003:3000
         - 9229:9229
      volumes:
         - .:/app
      command: node --inspect=0.0.0.0 app.js

第2步:编撰起来

docker-compose -f "docker-compose.yml" up

输出

[+] Building 7.4s (11/11) FINISHED
=> [internal] load build definition from Dockerfile
0.1s
=> => transferring dockerfile: 339B
0.0s
=> [internal] load .dockerignore
0.0s
=> => transferring context: 2B
0.0s
=> [internal] load metadata for docker.io/library/node:9-slim
6.1s
=> [auth] library/node:pull token for registry-1.docker.io
0.0s
=> [1/5] FROM docker.io/library/node:9-
slim@sha256:288b29c1925d65b2d7d8701f8ada201e7dcd066438c0fb4299c35dff129b893
f 0.0s
=> [internal] load build context
0.4s
=> => transferring context: 2.06MB
0.4s
=> CACHED [2/5] WORKDIR /app
0.0s 
=> CACHED [3/5] COPY package.json /app
0.0s
=> CACHED [4/5] RUN npm install
0.0s
=> [5/5] COPY . /app/
0.4s
=> exporting to image
0.2s
=> => exporting layers
0.2s
=> => writing image
sha256:9b4397fe271d2de609d46e44f73ff741bd8d736083b171e8c969d81f88ab9778
0.0s
=> => naming to docker.io/library/test_node-node_app
0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities
and learn how to fix them
[+] Running 1/2
- Network test_node_default Created
0.2s
- Container test_node-node_app-1 Creating
0.1s
Error response from daemon: invalid volume specification:
'/run/desktop/mnt/host/c/Users/HP/Desktop/debug_node/TEST_NODE:app:rw':
invalid mount config for type "bind": invalid mount path: 'app' mount path
must be absolute
C:\Users\HP\Desktop\debug_node\TEST_NODE>docker-compose -f "dockercompose.yml" up
[+] Running 1/1
- Container test_node-node_app-1 Created
0.1s
Attaching to test_node-node_app-1
test_node-node_app-1 | Debugger listening on ws://0.0.0.0:9229/d1ede9a1-
85f4-44a7-a7ce-49217508c6ac
test_node-node_app-1 | For help see https://nodejs.org/en/docs/inspector
test_node-node_app-1 | THE LOG OUTUPUT: PORT 3000

第3步:连接调试器

现在检查两者是否都在监听端口上。根据docker-compose文件,应用程序将在5003端口,调试器在9229端口。

对于节点应用程序localhost:5003

如何在Docker容器中调试Node.js应用程序?

对于调试,我们将使用vscode。打开它,选择调试器扩展部分,选择create launch.json .点击最左角的播放按钮,调试器就准备好了,并成功监听。

如何在Docker容器中调试Node.js应用程序?

结论

因此,我们能够成功地连接到visual studio代码内的调试器。我们还可以通过使用exec命令直接检查容器。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程