我希望能够使用bat文件调用docker compose。我尝试使用以下命令进行调用,但它没有执行命令。这是我的.bat文件:
echo on
cd C:\Program Files\Docker Toolbox\
start start.sh cd desktop
cd test
docker-compose up
有没有其他的方式可以使用批处理文件或其他文件来执行docker命令。
我希望能够使用bat文件调用docker compose。我尝试使用以下命令进行调用,但它没有执行命令。这是我的.bat文件:
echo on
cd C:\Program Files\Docker Toolbox\
start start.sh cd desktop
cd test
docker-compose up
批处理文件是一种脚本文件。脚本需要一个解释器。对于批处理文件,解释器是 cmd.exe
- Windows 命令解释器。
*.sh 文件也是一种脚本,需要一个解释器。在 Unix/Linux 系统上,解释器是 sh
、bash
、ksh
等可执行文件,但没有文件扩展名 .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
中的命令。
start.sh
并通过shell解释器在shell环境中执行其他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环境中执行的。
要通过批处理文件运行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 文档。
当我解决这个问题时,在一个docker-compose案例中:
进入你的docker-compose.yml文件夹
在该文件夹下,使用记事本(或其他工具)创建一个批处理文件,例如:mydockerbatchfile.bat
在该文件中,输入你的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将允许您在屏幕上检查执行结果。
cd desktop
是否在单独的一行上? - Marged