问题描述
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
为我解决了这个问题。