我正在尝试使用 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-compose
or 时Kubernetes
,事情就没有那么简单了。他们将启动容器并执行ENTRYPOINT
and 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 -d
以detach
让容器在后台运行的模式运行,并验证它是否正在运行docker-compose ps
。
为了进入你的容器,你可以运行命令
docker exec -it nodejs bash
注意:如果你运行docker-compose up
,看起来一切都挂了,但实际上,你看到的stdout
是那个容器的 ,它什么也不打印。Ctrl+C
会让你出去并同时停止容器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句