【问题标题】:Jump from command while its execution time is not ended在执行时间未结束时从命令跳转
【发布时间】:2016-10-30 06:41:08
【问题描述】:

我有如下脚本,“docker run”已启动,它将打开 tty 以根据 docker 文件执行其命令,报告执行结束标志大约需要 5-6 小时,但同时我需要让它完成工作并在 shell 脚本行中前进并获取一些 pid 并使用它来设置条件。 不,我的问题是我无法执行“docker run”,然后从它移动到其他脚本行。 如何在不影响“docker run”命令的情况下做到这一点。

    docker run --name=something -it --rm \
      --link=postgresql:postgresql \  
      --publish=80:80 \
      --env='something_PORT=80' \
      --env='NGINX_MAX_UPLOAD_SIZE=60m' \
      --volume=/srv/docker/something:/home/something/data \
      --volume=/srv/docker/something/rgloader:/home/something/rgloader \
      something:3.3 \
      app:backup:restore

#30 sec pass till process starts to unpack tar file.
    sleep 30

#Get PID of tar extraction process
    PID=`ps au | grep "tar -xf" | head -n 1 | awk '{print $2}'`
echo $PID

echo "tar file extraction is completed"

#wait until tar extraction process ends

while [ -e /proc/$PID ]
do
    echo $PID PID still running
    sleep 10
done

【问题讨论】:

  • 问题不太清楚。你想在后台docker run
  • 我知道如果我使用“-d”我可以在守护进程模式下运行 docker,但我只想运行 docker 并让它完成它的工作并转到下一行,bash 将在该行停止并我希望它向前发展。

标签: bash docker


【解决方案1】:

我知道如果我使用“-d”我可以在守护进程模式下运行 docker,但我只想运行 docker 并让它完成它的工作并转到下一行,

那么最简单的方法就是后台启动docker

docker run ... &
              ^^^

请注意,您的脚本的其余部分不会看到您的 docker 容器(如 tar)直接从主机启动的进程。
请参阅“Finding Docker container processes? from host point of view”。
为此,您必须使用 docker top

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2018-12-08
    • 2021-05-14
    • 2017-11-13
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    相关资源
    最近更新 更多