一旦 Docker 守护程序启动,在窗口上运行自定义批处理



我想运行一个自定义脚本来设置 docker 网络并启动 docker 容器(在设置一些目录之后(。 这个脚本很慢,所以我希望它在计算机启动时运行,但只有在 docker 守护程序启动后运行。

按照此处的说明在启动时运行批处理文件 我可以轻松创建一个批处理文件并让它在 starutp 上运行,但是我目前收到错误:

码头工人网络创建 --驱动 nat 我的网络 连接期间出错:发布 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/networks/create:打开//./pipe/docker_engine:系统找不到指定的文件。在 Windows 上的默认守护程序配置中,必须提升运行 docker 客户端才能连接。此错误也可能表示 docker 守护程序未运行。

我很确定它与特权无关,因为运行脚本本身是有效的。

问题: 是否可以在 Windows 批处理文件启动时以某种方式最后运行我的批处理文件(在所有其他启动都运行后,服务/守护程序已经启动(?

或者,是否有一些钩子,一旦 docker 守护程序启动并运行,它就可以让我运行一些自定义脚本。

我在 Windows 19.0 上运行 Docker 10。 我的 docker 配置为在启动时运行,并且守护程序在我使用 docker regaulraly 时运行平稳,所以问题似乎是脚本在 docker 守护程序完全启动之前运行。

@gerhard提出的解决方案,基本解决方案类似于这样: https://superuser.com/questions/618210/how-to-make-a-batch-file-wait-for-a-process-to-begin-then-continue:

:search
REM CHECKING IF PROCESS IS RUNNING
tasklist|find "MyEXE"
IF %ERRORLEVEL% = 1 THEN (GOTO NOTfound)
TIMEOUT /T 1
GOTO search
:NOTfound
REM DO WORK

谢尔比佩雷拉的答案是一个很好的线索。谢谢!然而,这只是一个线索。请允许我添加一个实际脚本,用于执行所要求的检测和反应:

:search
TIMEOUT /T 1
call docker container ls
IF /I "%ERRORLEVEL%" NEQ "0" GOTO search
echo Found docker to be running due to exit code being 0.
call docker run awesome_autostart_stuff_or_something

最新更新