我如何在 Dockerfile 中执行 2 个单独的命令?

How can i execute 2 seperate commands in a Dockerfile?

我有一个 Dockerfile,它在 ubuntu 基础映像上安装多个服务,例如 npm、nodejs 和 ssh。
我希望能够通过 ssh 进入容器以及 运行 一个 node express 应用程序。
它非常适合 运行 其中之一。但是我不知道如何启动这两个服务!
运行 ssh 我做了:

CMD ["/usr/sbin/sshd","-D"]  

对于节点应用程序,我克隆了一个 git 存储库和 运行:

CMD ["node" "app.js"]

每个 运行 都很完美。
但是我怎样才能执行这两个命令呢?
我尝试将它们都放在 CMD 指令中:

CMD ["/usr/sbin/sshd","-D", "node", "app.js"]

我还尝试用 运行:

执行其中一个
RUN node app.js
CMD ["/usr/sbin/sshd","-D"]

它执行但卡在了这一点并且没有继续计算图像..
我如何执行 /usr/sbin/sshd -D(我需要 运行 ssh)以及 node app.js?

这是完整的 Dockerfile:

FROM ubuntu:latest

RUN apt update && apt install  openssh-server sudo -y

RUN apt install git -y

RUN apt install nodejs -y

RUN apt install npm -y

RUN npm install express

RUN npm install better-sqlite3

RUN npm install morgan

RUN echo "PermitRootLogin yes">etc/ssh/sshd_config

RUN  echo 'root:root' | chpasswd

RUN git clone https://github.com/mauriceKalevra/Web2-Projekt.git

WORKDIR Web2-Projekt

RUN npm install


RUN service ssh start

EXPOSE 22


#CMD ["/usr/sbin/sshd","-D", "&&", "node", "app.js"lss" ]

CMD ["node", "app.js"]

执行此操作有两个选项。

选项 1

使用shell和&&执行两个命令。

FROM debian:stretch-slim as builder
CMD touch test.txt && ls

选项 2

把你想执行的所有命令放在可执行脚本 entrypoint.sh 和 运行 那个脚本 CMD

FROM debian:stretch-slim as builder
COPY entrypoint.sh /entrypoint.sh
CMD ./entrypoint.sh

entrypoint.sh

#!/bin/sh
touch test.txt
ls

编辑

请注意,默认情况下命令将按顺序执行,因此第二个命令只会在第一个命令之后执行。如果您的第一个进程永远不会终止,那么第二个进程将永远不会启动。使用 & 在后台执行命令。有关如何 运行 并行或顺序命令的更多信息,请参阅 this thread