【问题标题】:Not able to run CMD in dockerfile - DOCKER [duplicate]无法在 dockerfile 中运行 CMD - DOCKER [重复]
【发布时间】:2022-03-02 18:09:24
【问题描述】:

我正在使用 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!!!!"

【问题讨论】:

  • 除了此处和链接问题中的答案之外,请考虑重新设置此设置以使每个容器仅运行一个进程,作为前台进程,并且不需要 ssh 守护进程。

标签: docker dockerfile


【解决方案1】:

要使用多个启动命令,您需要使用 & 将它们连接在一起,或者创建一个可执行文件,如下所示: Dockerfile:

...
CMD /start.sh

start.sh:

#!/bin/bash
service ssh start
ngrok tcp 22 --log=stdout > ngrok.log
....

确保最后一个命令不会退出,否则容器也会关闭。运行多个命令存在问题,例如您无法使用“docker logs”从您运行的命令中获取日志,只能获取最后一个可执行文件等。

【讨论】:

    【解决方案2】:

    CMD 命令只能是一个,如果我们在一个 docker 文件中提供多个命令,最后一个将生效。 https://docs.docker.com/engine/reference/builder/#cmd

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多