为什么`docker-compose up`会抛出一个错误,其中`docker run`能够流畅运行

问题描述:

我试图设置一个开发环境&使用Docker生成NodeJS应用程序。对于开发环境,我尝试使用nodemon运行应用程序(因为这会监视文件更改)。但是,当我尝试使用docker-compose up运行它,我得到以下错误:为什么`docker-compose up`会抛出一个错误,其中`docker run`能够流畅运行

错误:网页无法启动服务网络:OCI运行时错误:container_linux.go:247:启动容器过程中造成“EXEC:\” nodemon \“:$ PATH中未找到可执行文件”

当我运行docker run web-app(与docker build -t web-app .生成在web-app图像我已经完全没有问题,我想知道怎么会发生这种不同的行为,以及如何。解决它下面我已经把我得到的文件,以更简单的理解这个问题


Dockerfile

FROM node:latest 

# Install nodemon globally 
RUN npm i nodemon -g 

# Add local directory to /node/web-app 
ADD . /node/web-app 
# Switch to /node/web-app 
WORKDIR /node/web-app 

# Install NPM dependencies 
RUN npm install 

# Run nodemon 
CMD ["nodemon", "."] 

泊坞窗,compose.yml

version: '2' 
services: 
web: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    command: 
    - nodemon . 
+0

这似乎对我来说太奇怪了。我尝试了一个例子,工作得很好。你确定你在两种情况下运行相同的图像吗? – Robert

+0

嗨@罗伯特我发现了问题,我已经更新了我原来的帖子。在我的docker-compose文件中,我有“command: - nodemon”,并添加该行会引发错误,删除该行可以解决问题。我仍然不明白这有什么不同。 = / – user007

所以,看到你的评论。我意识到什么是问题。 docker-compose.yml中的command指令不应该是一个列表。

把它写成字符串:

command: nodemon . 

但是,作为同一命令在Dockerfile已经声明,这是没有必要的,以把它放在搬运工,compose.yml


编辑:这是可能的命令作为列表,但你需要seaparate每个参数:

command: 
    - nodemon 
    - .