我正在使用 dockerfile 创建一个镜像,我希望每次 docker 容器启动时,ssh 连接也应该启动,然后 ngrok 也应该启动,但我无法使用 CMD 命令,你们可以帮我吗?它。
FROM ubuntu
ENTRYPOINT echo "Entering......"; bin/bash; ngrok tcp 22
RUN apt-get update
RUN apt-get install curl -y
RUN apt-get install openssh-server -y
RUN curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | tee /etc/apt/sources.list.d/ngrok.list && apt update && apt-get install ngrok
RUN ngrok authtoken 25dYasdvM3C1IkDtT9QEG7ZwIWw_59Ar5Hp4NcrusbyVAu6Sv
CMD echo "SSH starting"
CMD service ssh start
CMD echo "SSH started"
CMD echo "started creating log file"
CMD echo "file created!!"
CMD ngrok tcp 22 --log=stdout > ngrok.log &
CMD echo "log file created"
CMD touch hello.txt
CMD echo "simple file created"
CMD echo "log file created and esatablished network successully"
CMD echo "working fine"
CMD echo "Starting!!!!"
要使用多个启动命令,您需要使用 & 将它们连接在一起或创建一个可执行文件,如下所示: Dockerfile:
...
CMD /start.sh
开始.sh:
#!/bin/bash
service ssh start
ngrok tcp 22 --log=stdout > ngrok.log
....
确保最后一个命令不会退出,否则容器也会关闭。运行多个命令会出现问题,例如您无法使用“docker log”从您运行的命令中获取日志,只能获取最后一个可执行文件等。
只能是一个 CMD 命令,如果我们在 docker 文件中提供多个命令,则最后一个命令生效。 https://docs.docker.com/engine/reference/builder/#cmd