如何使用TeamCity使用-i -t选项运行docker容器?

时间:2014-10-02 14:11:04

标签: teamcity docker

我正在尝试运行docker容器作为构建在Linux TeamCity构建代理上的一部分。但是,如果我使用-i -t选项运行docker容器,则在执行命令的构建日志中没有输出。

命令行构建步骤:

sudo docker run -i -t --name="echo_test" ubuntu echo "test"

从echo命令构建日志缺失输出:

Step 1/2: Command Line (1s)
   [Step 1/2] Starting: /home/ec2-user/BuildAgent/temp/agentTmp/custom_script6340936320796175009
   [Step 1/2] in directory: /home/ec2-user/BuildAgent/work/831248796cfa0a04
   [Step 1/2] Process exited with code 0

Docker容器日志确实有echo命令的输出:

[ec2-user@ip-10-28-218-103 ~]$ docker logs echo_test
test

有人可以解释为什么会发生这种情况或提供某种方法来诊断问题吗?

如果我将run docker个选项更改为:-i,只需-t,或删除它们两者都有效。

值得一提的是,在TeamCity中尝试在Command Line构建步骤中执行sudo命令时,我首先遇到sudo: sorry, you must have a tty to run sudo错误。我在Default requiretty中注释了/etc/sudoers来解决此问题。


我通过添加-a stdout -a stderr选项将输出文本回显到Build Log。

命令行构建步骤:

sudo docker run -i -t -a stdout -a stderr --name="echo_test" ubuntu echo "test"

所以问题是现在为什么在本地机器上执行命令时不需要它们。

1 个答案:

答案 0 :(得分:0)

我认为这里的关键信息是您在使用sudo时收到的错误。

sudo: sorry, you must have a tty to run sudo

当您拥有tty时,将为设备和驱动程序连接stdin和stdout句柄。但是由于构建没有tty,所以它们没有为您连接。通过在运行命令中附加stdin和stdout,您可以自己连接它们。

在本地运行docker命令时,您使用tty运行它,并且默认情况下已为您连接了句柄。