【问题标题】:Why is container exiting immediately after executing docker run command?为什么容器在执行 docker run 命令后立即退出?
【发布时间】:2019-01-08 21:56:10
【问题描述】:

我是第一次运行 docker,我的容器在 docker run 命令后立即退出。 docker ps 向我展示了一个空列表。当我运行docker ps -a 时,我得到了我在退出状态下推送的所有容器的结果。

我尝试过使用-ti 命令,但容器处于退出状态。 我正在使用以下命令来运行文件:$ sudo docker build -t test_api3 .$ sudo docker run -p 8080:3000 -ti test_api3 或 ($ sudo docker run -p 8080:3000 -d test_api3)

Dockerfile

    FROM node:8
    WORKDIR /usr/src/app
    COPY package*.json ./
    RUN npm install
    COPY . .
    EXPOSE 3000
    CMD [ "npm","start" ]

package.json

    {
      "name": "firstapp",
      "version": "1.0.0",
      "description": "first demo app",
      "main": "http-server.js",
      "scripts": {
        "start": "node http-server.js"
      },
      "keywords": [
        "S"
      ],
      "author": "test",
      "license": "ISC"
    }

http-server.js

    const http = require('http');

    const hostname = '127.0.0.1';
    const port = 3000;

    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end('Hello World\n');
    });

    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });

【问题讨论】:

  • 日志说什么?你可以在它退出后立即运行docker logs $(docker ps -lq)以获取上次运行容器的日志。
  • 我的问题已解决,但不知何故我无法运行该命令。 docker logs 给我的错误是“docker logs”需要正好 1 个参数。我无法获取容器的日志。

标签: node.js docker docker-compose dockerfile port


【解决方案1】:

我正在运行 ubuntu os 并且它可以工作(如果它仍然无法工作,请告诉我您的设置)。代码的唯一问题是您不能使用地址 127.0.0.1 并且必须在 http-server.js 中使用 0.0.0.0。更多解释请参考以下链接

https://forums.docker.com/t/network-param-for-connecting-to-127-0-0-1-in-container/2333

【讨论】:

  • 谢谢。改地址后就可以了。只是为了理解原因:它不起作用,因为 127.0.0.1 是不能暴露给其他网络的环回地址。那么,我们使用 0.0.0.0 来标识本地机器?
  • 是的,这是正确的。要深入了解 docker 网络,您可以访问他们的网页,它非常庞大且全面
最近更新 更多