docker-compose exec python 输入设备不是 AWS EC2 UserData 中的 TTY

Posted

技术标签:

【中文标题】docker-compose exec python 输入设备不是 AWS EC2 UserData 中的 TTY【英文标题】:docker-compose exec python the input device is not a TTY in AWS EC2 UserData 【发布时间】:2018-09-18 08:06:31 【问题描述】:

我正在使用 EC2 UserData 引导实例。

跟踪bootstrap执行日志/var/log/cloud-init-output.log,发现脚本停止在:

+ docker-compose exec web python /var/www/flask/app/db_fixtures.py
the input device is not a TTY

这个命令似乎是在交互模式下运行的,但是为什么呢?以及如何强制此命令的非交互模式(docker-compose exec)?

【问题讨论】:

【参考方案1】:

引用the docker-compose exec docs:

命令默认分配一个 TTY,因此您可以使用诸如 docker-compose exec web sh 之类的命令来获得交互式提示。

要禁用此行为,您可以使用 -T 标志来禁用伪 tty 分配:

docker-compose exec -T web python /var/www/flask/app/db_fixtures.py

或者在运行docker-compose exec之前将COMPOSE_INTERACTIVE_NO_CLI environment variable设置为1:

export COMPOSE_INTERACTIVE_NO_CLI=1

【讨论】:

是的..我明白了。尽管如此,你应该得到 +1。 -T 效果很好。但是设置COMPOSE_INTERACTIVE_NO_CLI=1 给我一个ValueError: I/O operation on closed file. 错误。

以上是关于docker-compose exec python 输入设备不是 AWS EC2 UserData 中的 TTY的主要内容,如果未能解决你的问题,请参考以下文章

Docker1指令,docker-compose,Dockerfile

Docker1指令,docker-compose,Dockerfile

从 php 执行的 python 脚本给出错误

docker user问题

docker多服务依赖问题解决

4.pytho while 循环