如何使用 .bat 文件运行通过 Docker 终端命令

3

我希望能够使用bat文件调用docker compose。我尝试使用以下命令进行调用,但它没有执行命令。这是我的.bat文件:

echo on
cd C:\Program Files\Docker Toolbox\
start start.sh cd desktop 
cd test
docker-compose up

有没有其他的方式可以使用批处理文件或其他文件来执行docker命令。

它只是打开了Docker终端,然后终端自动关闭了。 - raj19
从已经打开的cmd.exe中调用批处理并显示输出。start.sh应该做什么?cd desktop是否在单独的一行上? - Marged
start.sh 将调用 Docker 终端。 - raj19
通常情况下,Windows 无法解释 .sh 文件。那个文件的内容是什么? - Marged
它执行Docker终端窗口。 - raj19
显示剩余5条评论
3个回答

6

批处理文件是一种脚本文件。脚本需要一个解释器。对于批处理文件,解释器是 cmd.exe - Windows 命令解释器。

*.sh 文件也是一种脚本,需要一个解释器。在 Unix/Linux 系统上,解释器是 shbashksh 等可执行文件,但没有文件扩展名 .exe,因为在 Unix/Linux 上,可执行文件通常没有文件扩展名。

在 Windows 上,默认情况下没有为 Unix/Linux shell 脚本安装解释器。如果 start start.sh 能够正常工作,则是因为在 Windows 上安装了一个 shell 解释器,并在 Windows 注册表中注册为打开 *.sh 文件的应用程序,这意味着通过启动应用程序来解释 shell 脚本文件中的命令。

但是,在 Windows 命令环境中解释并执行的批处理脚本命令无法在 shell 解释器的 shell 环境中执行。

start start.sh 启动一个新进程,与为批处理文件创建的 Windows 命令进程并行运行。此行后,批处理文件处理立即继续执行命令进程中的下一条命令,而 shell 解释器进程并行解释 start.sh 中的命令。

在这里您需要一个批处理文件,它创建一个shell脚本来调用start.sh并通过shell解释器在shell环境中执行其他shell命令。
下面的批处理代码可能有效。我没有测试过,因为我没有在Windows机器上安装Docker Toolbox或任何shell解释器。
@echo off
set "ShellScriptFile=%TEMP%\%~n0.sh"
(   echo start.sh
    echo cd desktop/test
    echo docker-compose up
) >"%ShellScriptFile%"
start "Docker Compose" /D"%ProgramFiles%\Docker Toolbox" /wait "%ShellScriptFile%"
del "%ShellScriptFile%"
set "ShellScriptFile="

为了理解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
  • call /? ... 解释了%~n0(批处理文件的名称,不包括文件扩展名和路径)
  • del /?
  • echo /?
  • set /?
  • start /?

还可以阅读微软文章使用命令重定向运算符,以解释此处使用的重定向运算符>,用于创建要执行的 shell 脚本的 3 行。

start.sh
cd desktop/test
docker-compose up

这三行代码是由shell脚本解释器在shell环境中执行的。


1

要通过批处理文件运行docker-compose,
1. 创建一个批处理文件,例如run-docker-compose-up.bat

cd c:\docker
docker-compose up -d
pause

c:\docker 是我放置 docker-compose.yml 文件的位置。
-d 在后台运行容器 参见 Docker Compose Up 文档

  1. docker-compose 必须以管理员身份运行。
    虽然 bat 文件本身无法标记为以管理员身份运行,但您可以:
    • 右键单击 bat 文件并选择“以管理员身份运行”
    • 或者创建一个指向 bat 文件的快捷方式并将其标记为以管理员身份运行
      (右键单击快捷方式,选择“属性”,选择“高级”,选择“以管理员身份运行”)

0

当我解决这个问题时,在一个docker-compose案例中:

  1. 进入你的docker-compose.yml文件夹

  2. 在该文件夹下,使用记事本(或其他工具)创建一个批处理文件,例如:mydockerbatchfile.bat

  3. 在该文件中,输入你的docker命令序列,例如:

    echo on
    docker-compose down
    docker container prune --force
    docker system prune --volumes --force
    docker image rm xxx/web-api
    docker system df
    docker image ls
    pause
    

注意:命令pause将允许您在屏幕上检查执行结果。

  1. 保存 -> 确保您以批处理格式/扩展名保存(mydockerbatchfile .bat
  2. 在您的Windows桌面上,为'item 3 batch-file'创建一个快捷方式(这里- 不要将快捷方式设置为“以管理员身份运行”)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接