【问题标题】:Running nodejs with docker-compose doesn't work but work with docker run command使用 docker-compose 运行 nodejs 不起作用,但可以使用 docker run 命令
【发布时间】:2020-02-11 00:57:12
【问题描述】:

我正在尝试使用 Nodejs 官方 docker 映像运行容器。所有使用下面的“docker run”命令:

docker run -it -p 8080:8080 --name nodejs --volume ${PWD}/app:/usr/node/app --workdir /usr/node/app node:12 bash

但我会使用 docker-compose,所以我尝试了这个:

version: "3"

services:
  nodejs:
    container_name: nodejs
    image: node:12
    working_dir: /usr/node/app
    volumes:
      - ${PWD}/app:/usr/node/app
    ports:
      - 8080:8080

但是当我运行时> docker-compose up

Creating network "node_default" with the default driver
Creating nodejs ... done
Attaching to nodejs
nodejs exited with code 0

我错过了什么吗?

【问题讨论】:

  • 它以代码 0 退出——这意味着没有错误。你期待它做什么?

标签: node.js docker docker-compose


【解决方案1】:

当运行 docker run 命令时,你正在覆盖 docker 容器中的 CMD 并将自己直接附加到容器的 shell。

docker run -it -p 8080:8080 --name nodejs --volume ${PWD}/app:/usr/node/app --workdir /usr/node/app node:12 bash

但是,当使用docker-composeKubernetes 时,事情就没有那么简单了。他们将启动容器并执行ENTRYPOINTCMD。一旦这些命令退出,容器就会退出。对于您的docker-compose,它正在执行docker-entrypoint.sh node,它将立即退出。

您可以通过运行docker-compose ps 来验证这一点,并看到容器状态为Exit 0

如果你想让你的容器永远运行而不退出,你可以将你的docker-compose文件更新成这样

version: "3"

services:
  nodejs:
    container_name: nodejs
    image: node:12
    working_dir: /usr/node/app
    volumes:
      - ${PWD}/app:/usr/node/app
    ports:
      - 8080:8080
    entrypoint: bash
    command:
      - -c
      - |
        tail -f /dev/null

之后,您应该运行 docker-compose up -d 以在 detach 模式下运行,这会使容器在后台运行并验证它是否正在使用 docker-compose ps 运行。

为了进入你的容器,你可以运行命令

docker exec -it nodejs bash

注意:如果您运行docker-compose up,看起来一切都挂了,但实际上,您看到的是该容器的stdout,它什么也没打印。 Ctrl+C 会让你离开并同时停止容器。

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2022-08-21
    • 2019-11-14
    • 2020-10-08
    相关资源
    最近更新 更多