首页 > 解决方案 > 如何在 docker 容器中执行期望脚本

问题描述

我有一个期望脚本,我想在 docker 容器中运行。我已将文件命名为 exp 扩展名并将文件称为 filename.exp。我正在使用 Ubuntu 泊坞窗图像。看起来容器能够识别以 #!/usr/bin/env bash 而不是 #!/usr/bin/expect 开头的文件

管道.yml 文件

jobs:
  - name: job-pass-files
    public: true
    plan:
      - get: resource-tutorial
      - task: create-some-files
        config:
          platform: linux
          image_resource:
            type: docker-image
            source: {repository: ubuntu}

          inputs:
            - name: resource-tutorial

          run:
            path: resource-tutorial/filename.exp

文件名.exp

#!/usr/bin/expect

eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no user@****
#use correct prompt
set prompt ":|#|\\\$"
interact -o -nobuffer -re $prompt return
send "Password\r"
interact

在大厅执行作业时出现以下错误

Backend error: Exit status: 500, message: {"Type":"","Message":"runc exec: exit status 1: exec failed: container_linux.go:348: starting container process caused \"no such file or directory\"\n","Handle":"","ProcessID":"","Binary":""}

有没有办法从 Docker 容器执行期望脚本。有图片支持吗?我是 docker 新手,所以非常感谢任何帮助

标签: bashdockerexpect

解决方案


我使用期望脚本在我的 16.04 Ubuntu 容器之一中安装需要用户提示的程序。确保安装期望的二进制文件,它不包括在内。这是它的样子:

Dockerfile:

<snip>

#Install yocto dependencies
RUN apt-get update && apt-get -y install gawk wget git-core diffstat unzip texinfo gcc-multilib \
  build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
  xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
  xterm repo expect locales

# Install
RUN /home/docker/scripts/install.exp

<snip>

安装.exp:

#!/usr/bin/expect

set timeout -1

<snip>

推荐阅读