从 sh 传递变量以期望不与 docker-compose 一起使用

问题描述

Dockerfile 包含:

ENV VAR 1
copY ./setup.exp /tmp/
RUN chmod a+x /tmp/setup.exp

期望文件

#!/usr/bin/expect
set timeout -1
spawn setup -v
expect "Enter variable: "
send -- "$env(VAR)\r"

shell 文件(main.sh):

#!/bin/sh
/tmp/setup.exp $VAR

当我从容器内的 shell 运行 ./main.sh 时,它工作得很好。

但是,当我使用 docker-compose up 运行 entrypoint: ./main.sh 时,它会打印此错误

send: spawn id exp4 not open
    while executing
"send -- "$env(VAR)\r""
    (file "/tmp/setup.exp" line 5)

如果我直接将变量作为 entrypoint: /tmp/setup.exp ${VAR} 传递,它会打印此警告:

WARNING: The VAR variable is not set. Defaulting to a blank string.

我也试过 set VAR [lindex $argv 0];send -- "$VAR\r" 都没有成功。

似乎从容器内部脚本能够加载 docker 的 env 变量。

有什么建议吗?

解决方法

感谢@glennjackman 指出这一点。我运行 expect -d 以获得更详细的输出。

原来程序退出的原因是因为python引发了这个异常:

ValueError: invalid width 0 (must be > 0)

在 Dockerfile 中设置变量 say ENV COLUMNS 100 为我解决了这个问题。