Node.js Docker run仅在构建后工作

Node.js Docker run仅在构建后工作,node.js,bash,docker,Node.js,Bash,Docker,我可以用 docker build -t hopperweb:v5-full -f Dockerfile . && docker run -p 127.0.0.1:3000:8080 --rm -ti hopperweb:v5-full 但是,当我运行容器时,我得到了以下错误:standard\u init\u linux.go:211:exec用户进程导致了“exec格式错误” 当它在和&之后运行时,为什么会工作 我可以使用bash运行映像:docker run-p 127

我可以用

docker build -t hopperweb:v5-full -f Dockerfile . && 
docker run -p 127.0.0.1:3000:8080 --rm -ti hopperweb:v5-full
但是,当我运行容器时,我得到了以下错误:
standard\u init\u linux.go:211:exec用户进程导致了“exec格式错误”

当它在
和&
之后运行时,为什么会工作

我可以使用bash运行映像:
docker run-p 127.0.0.1:3000:8080--rm-ti-hopperweb:v5 full bash
,没有问题

这是我的文件

FROM ubuntu:18.04

RUN apt-get update
RUN apt-get install --yes curl
RUN apt-get install --yes sudo  ## maybe not necessary, but helpful
RUN apt-get install --yes gnupg
RUN apt-get install --yes git   ## not necessary, but helpful
RUN apt-get install --yes vim   ## not necessary, but helpful

## INSTALL NPM
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo 'deb https://dl.yarnpkg.com/debian/ stable main' | sudo tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update
RUN apt-get install --yes yarn
RUN apt-get install --yes npm

## COPY IN APP FILES
RUN mkdir /app
COPY hopperweb/ /app/hopperweb/

RUN chmod +x /app/hopperweb/start.sh
RUN /app/hopperweb/start.sh
start.sh的内容:

#!/bin/bash

cd /app/hopperweb/
yarn start

在第一个命令中,
docker run
永远不会执行,因为最后一个命令(
start.sh
)在构建过程中运行,并且永远不会终止。所以您仍然在运行
docker build

更改以下行

RUN /app/hopperweb/start.sh

不要将RUN与CMD混淆。RUN实际运行一个命令并提交结果;CMD在构建时不执行任何操作,但为映像指定预期的命令


请参阅:

FYI每个“运行”块都会创建一个新的图像层。你想在可能的情况下对这些进行分组。谢谢@jordanm,果然,我记错了网站上的提示,我以为它说的是为了可读性而打破一切,但你完全正确。我确实是从CMD开始的,但我遇到了一些问题,于是改用RUN。非常感谢。
RUN /app/hopperweb/start.sh
CMD /app/hopperweb/start.sh