繁体   English   中英

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

[英]Running nodejs with docker-compose doesn't work but work with docker run command

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

然而,当使用Kubernetes docker-composeKubernetes ,事情就没有那么简单了。 他们将启动容器并执行ENTRYPOINTCMD 一旦这些命令退出,容器就会退出。 在您的docker-entrypoint.sh node docker-compose情况下,它正在执行docker-entrypoint.sh node ,该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将使您退出并同时停止容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM