使用 docker-compose 运行 nodejs 不起作用,但使用 docker run 命令

科伦丁·福里尔

我正在尝试使用 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

我错过了什么?

阮林福

运行 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-composeor 时Kubernetes,事情就没有那么简单了。他们将启动容器并执行ENTRYPOINTand CMD一旦这些命令退出,容器就会退出。在您的情况下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 -ddetach让容器在后台运行的模式运行,并验证它是否正在运行docker-compose ps

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

docker exec -it nodejs bash

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章