Console.log 在 dockerized Node.js / Express 应用程序中不起作用

hum*_*man 3 node.js express docker dockerfile

我使用以下 Dockerfile 在 docker 容器中构建了一个 Node.js 应用程序:

FROM node:carbon

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)

我正在尝试在快速路由中使用 console.log,但是在 之后docker run -p 49160:8080 -d,控制台不是交互式的,并且根本没有回显日志。

'use strict';

// Requires
const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();

// Routes
app.get('/', (req, res) => {
    // This isn't being printed anywhere
    console.log(req);
});

// Start
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Chr*_*tos 5

-d从用于运行容器的命令中删除:

docker run -p 49160:8080
Run Code Online (Sandbox Code Playgroud)

-d选项在后台运行容器,因此您将无法在控制台中看到其输出。

如果您想让容器在后台运行并希望访问该容器的外壳,则可以在容器启动并运行后运行以下命令:

docker exec -it <container-name> bash
Run Code Online (Sandbox Code Playgroud)

  • 并不是所有的 javascript 都像浏览器一样在同一个运行环境中执行。在这种情况下,JavaScript 在节点运行时环境中运行,这是一种服务器端技术。用于构建此容器的 docker 映像上安装了 Node,并且 CMD 命令在容器中使用 Node 运行 javascript 代码。 (2认同)