我正在尝试使用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 :(得分:0)
运行docker run命令时,您将覆盖docker容器中的CMD,并将自己直接附加到该容器的外壳上。
docker run -it -p 8080:8080 --name nodejs --volume ${PWD}/app:/usr/node/app --workdir /usr/node/app node:12 bash
但是,在使用docker-compose
或Kubernetes
时,事情并不是那么简单。他们将旋转容器并执行ENTRYPOINT
和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
将带您离开并同时停止容器。