我正在Jenkinsfile中运行以下命令。然而,我收到错误“输入设备不是TTY”。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有一种方法可以在不进行交互模式的情况下从Jenkinsfile运行脚本?
我基本上有一个名为script.sh的文件,我想在Docker容器中运行。
我正在Jenkinsfile中运行以下命令。然而,我收到错误“输入设备不是TTY”。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有一种方法可以在不进行交互模式的情况下从Jenkinsfile运行脚本?
我基本上有一个名为script.sh的文件,我想在Docker容器中运行。
当前回答
对于docker运行DON NOT USE-it标志
(如BMitch所述)
这并不完全是你所要求的,但对其他人也很有用:
对于docker compose exec,使用-T标志!
-T键将帮助使用docker的人编写exec!(它禁用伪tty分配)
例如:
docker-compose -f /srv/backend_bigdata/local.yml exec -T postgres backup
or
docker-compose exec -T mysql mysql -uuser_name -ppassword database_name < dir/to/db_backup.sql
其他回答
如果使用windows,请尝试使用cmd,对我来说它是有效的。检查docker是否已启动。
如果您在windows上使用gitbash,只需将
冬季的
在“码头线”之前:
winpty docker exec -it some_container bash
在詹金斯,我使用docker compose exec-T
eg:-
docker-compose exec -T app php artisan migrate
使用docker compose exec-T通过Jenkins为我解决了这个问题
docker compose exec-T containerName php script.php
我知道这并不是直接回答眼前的问题,而是针对使用WSL运行Docker for windows和cmder或conemu的人。
诀窍不在于使用安装在windows上的Docker,而在于安装ubuntu/linux Docker。值得指出的是,您不能在WSL中运行Docker本身,但可以从linux Docker客户端连接到Docker for windows。
在Linux上安装Docker
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
连接到端口2375上的Docker for windows,需要从Docker for windows中的设置启用该端口。
docker-H localhost:2375运行-it-v/mnt/c/code:/var/app-w“/var/app”centos:7
或者设置docker_host变量,这样可以省略-H开关
导出DOCKER_HOST=tcp://localhost:2375
现在您应该能够与tty终端会话交互连接。