用一个等待的bash设置一个docker容器来安装npm模块

我正在尝试做一些非常微不足道的事情。 对于我的开发环境,我希望能够在我的容器中有一个shell,所以我可以运行命令,如npm install或npm run xxx。

(我不想在构build期间安装我的npm模块,因为我想将它们映射到主机,这样我的编辑器就能够在主机上find它们,我不想在主机上执行npm install,因为我不不希望主机必须安装npm)。

所以,即使在生产容器中,我会指示我的容器只运行节点,在我的开发人员容器中,我希望有一个始终在等待的bash。

如果我将入口点设置为/ bin / bash,容器立即退出。 这意味着我不能再附加它(因为它停止),并启动它将立即退出它。

我试着写一个小的.sh来循环,然后再次启动/ bin / bash,但是在我的ENTRYPOINT中使用它会产生一个错误,即找不到.sh文件,即使我知道它在容器中。

有任何想法吗?

您可以使用docker exec在给定的容器中运行命令。

 # Open an interactive bash shell in my_container docker exec -it my_container bash 

或者,您可以使用docker run来创build一个新的容器来运行给定的命令。

 # Create a container with an interactive bash shell # Delete the container after exiting docker run -it --rm my_image bash 

另外,从这个问题我得到的意识,你仍然在确定如何工作,以及如何使用它的过程中。 我build议使用这个问题的信息来确定为什么你的容器正在退出当你设置入口/bin/bash 。 找出不符合预期的原因将有助于您更好地理解Docker。

我不确定你想要运行什么命令,但是这是我的猜测:

Bash需要一个tty,所以如果你尝试在后台运行而不分配一个tty,它会自行终止。

如果你想在后台运行bash,一定要分配一个tty来等待。

举个例子, docker run -d -it ubuntu会在后台启动一个bashterminal,你将来可以通过docker attach