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

如何使用TeamCity运行带有-i-t选项的docker容器?,teamcity,docker,Teamcity,Docker,我正在尝试将docker容器作为linux TeamCity构建代理构建的一部分来运行。但是,如果我使用-I-t选项运行docker容器,则在生成日志中没有来自已执行命令的输出 命令行生成步骤: sudo docker run -i -t --name="echo_test" ubuntu echo "test" sudo docker run -i -t -a stdout -a stderr --name="echo_test" ubuntu echo "test" 生成日志缺少echo

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

命令行生成步骤:

sudo docker run -i -t --name="echo_test" ubuntu echo "test"
sudo docker run -i -t -a stdout -a stderr --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
[ec2-user@ip-10-28-218-103 ~]$ docker logs echo_test
test
Docker容器日志具有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
[ec2-user@ip-10-28-218-103 ~]$ docker logs echo_test
test
有人能解释为什么会发生这种情况,或者提供一些诊断问题的方法吗

如果我将
运行docker
选项更改为:just
-I
,just
-t
,或者将它们都删除,则这两个选项都有效

值得一提的是,一开始我遇到了
sudo:对不起,在TeamCity的命令行构建步骤中尝试执行sudo命令时,您必须有一个tty来运行sudo
错误。为了解决这个问题,我在
/etc/sudoers
中注释掉了
defaultrequirety


通过添加
-a stdout-a stderr
选项,我让echo输出文本以构建日志

命令行生成步骤:

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

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

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

sudo: sorry, you must have a tty to run sudo
当您有一个tty时,设备和驱动程序的stdin和stdout句柄将为您连接。但是由于构建没有tty,因此它们不会为您连接。通过在run命令中附加stdin和stdout,您可以自己连接它们

在本地运行docker命令时,使用tty运行该命令,默认情况下,句柄已连接