我如何在 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。
我有一个 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。