执行具有 docker 的 shell 脚本 | docker 未找到命令
Executing a shell script having docker | docker commands not found
我使用 Ubuntu 18.04 在 Azure 中创建了一个管道。我的要求是 运行 使用 bash 脚本创建 docker 图像,并创建了下面相同的脚本,但在执行时我收到错误消息“docker 命令不存在并且 docker: 引用格式无效。
test.sh
#!/bin/bash
#
echo "=== docker Images==="
docker images
echo "==== Starut running a jmeter/image ===="
docker run "justb4/jmeter:latest"
echo "==== Finish ===="
Error
Starting: Bash Script scripts/test.sh
==============================================================================
Task : Bash
Description : Run a Bash script on macOS, Linux, or Windows
Version : 3.163.2
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Formatted command: bash '/home/vsts/work/1/s/scripts/test.sh' 'justb4/jmeter:latest' mainTest.jmx qa-url 30 1 60 15 2 60 1000
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/5c641c31-4e55-4ab8-be9e-4cf850432bab.sh
=== docker Images===
docker: 'images
' is not a docker command.
See 'docker --help'
==== Starut running a jmeter/image ====
docker: invalid reference format.
See 'docker run --help'.
==== Finish ====
Finishing: Bash Script scripts/test.sh
为了详细描述,这里是在 az pipeline 上创建的任务:-
1. Install a docker
Output of Task1
2. Just for debugging purpose, I added below bash task **with inline commands** to see if docker
命令有效,并且运行良好,没有任何问题。但是在 task3 中,当我尝试执行
使用相同命令的脚本失败了。
任务 2 的输出
3. Task 3 to execute test.sh script having docker commands
任务 3 的输出
问题出在 Windows 或 DOS 风格的行尾,但在 Azure 管道中执行时它并没有抛出实际错误。后来了解到,每行都以 Carriage Return 后跟换行字符终止。如果脚本文件以 Windows 行结尾保存,Bash 将文件视为
#!/bin/bash^M
^M
cd "src"^M
最后有一个特殊字符。
在脚本上尝试 运行 dos2unix 解决了问题。
http://dos2unix.sourceforge.net/
或者使用 vi 和测试在你的 Unix 环境中重写脚本。
Unix 使用不同的行尾,因此无法读取您在 Windows 上创建的文件。因此它将 ^M 视为非法字符。
我使用 Ubuntu 18.04 在 Azure 中创建了一个管道。我的要求是 运行 使用 bash 脚本创建 docker 图像,并创建了下面相同的脚本,但在执行时我收到错误消息“docker 命令不存在并且 docker: 引用格式无效。
test.sh
#!/bin/bash
#
echo "=== docker Images==="
docker images
echo "==== Starut running a jmeter/image ===="
docker run "justb4/jmeter:latest"
echo "==== Finish ===="
Error
Starting: Bash Script scripts/test.sh
==============================================================================
Task : Bash
Description : Run a Bash script on macOS, Linux, or Windows
Version : 3.163.2
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Formatted command: bash '/home/vsts/work/1/s/scripts/test.sh' 'justb4/jmeter:latest' mainTest.jmx qa-url 30 1 60 15 2 60 1000
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/5c641c31-4e55-4ab8-be9e-4cf850432bab.sh
=== docker Images===
docker: 'images
' is not a docker command.
See 'docker --help'
==== Starut running a jmeter/image ====
docker: invalid reference format.
See 'docker run --help'.
==== Finish ====
Finishing: Bash Script scripts/test.sh
为了详细描述,这里是在 az pipeline 上创建的任务:-
1. Install a docker
Output of Task1
2. Just for debugging purpose, I added below bash task **with inline commands** to see if docker
命令有效,并且运行良好,没有任何问题。但是在 task3 中,当我尝试执行 使用相同命令的脚本失败了。
任务 2 的输出
3. Task 3 to execute test.sh script having docker commands
任务 3 的输出
问题出在 Windows 或 DOS 风格的行尾,但在 Azure 管道中执行时它并没有抛出实际错误。后来了解到,每行都以 Carriage Return 后跟换行字符终止。如果脚本文件以 Windows 行结尾保存,Bash 将文件视为
#!/bin/bash^M ^M cd "src"^M
最后有一个特殊字符。
在脚本上尝试 运行 dos2unix 解决了问题。
http://dos2unix.sourceforge.net/
或者使用 vi 和测试在你的 Unix 环境中重写脚本。
Unix 使用不同的行尾,因此无法读取您在 Windows 上创建的文件。因此它将 ^M 视为非法字符。