如何在Dockerfile中执行两个单独的命令



我有一个Dockerfile,它在基于ubuntu的映像上安装多个服务,如npm、nodejs和ssh
我希望能够ssh到容器中,还可以运行nodeexpress应用程序
运行其中一个非常有效。但我不知道如何启动这两项服务
要运行ssh,我做了:

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

对于节点应用程序,我克隆了一个git-reo并运行:

CMD ["node" "app.js"]

每一个都运行得很完美
但是如何执行这两个命令
我试着把它们都放在CMD指令中:

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

我还试着用RUN:执行其中一个

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

入口点.sh

#!/bin/sh
touch test.txt
ls

编辑

请注意,默认情况下,命令将按顺序执行,因此第二个命令将仅在第一个命令之后执行。如果你的第一个过程永远不会终止,那么第二个过程就永远不会开始。使用&在后台执行命令。有关如何并行或顺序运行命令的更多信息,请参阅本线程。

相关内容

  • 没有找到相关文章

最新更新