我有一個 Dockerfile,它在 ubuntu baseimage 上安裝多個服務,例如 npm、nodejs 和 ssh。
我希望能夠 ssh 進入容器并運行 node express 應用程式。
它完美地運行其中之一。但我不知道如何啟動這兩個服務!
要運行 ssh 我做了:
CMD ["/usr/sbin/sshd","-D"]
對于節點應用程式,我克隆了一個 git repo 并運行:
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"]
uj5u.com熱心網友回復:
有兩個選項可以做到這一點。
選項1
使用 shell 并&&執行兩個命令。
FROM debian:stretch-slim as builder
CMD touch test.txt && ls
選項 2
將您要執行的所有命令放在 executabel 腳本entrypoint.sh中并在其中運行該腳本CMD
FROM debian:stretch-slim as builder
COPY entrypoint.sh /entrypoint.sh
CMD ./entrypoint.sh
入口點.sh
#!/bin/sh
touch test.txt
ls
編輯
請注意,默認情況下,命令將按順序執行,因此第二個命令只會在第一個命令之后執行。如果您的第一個行程永遠不會終止,那么第二個行程將永遠不會啟動。用于&在后臺執行命令。有關如何并行或順序運行命令的更多資訊,請參閱此執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449840.html
