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