从Docker容器A(在Docker容器B上)运行Bash脚本

时间:2016-10-12 11:33:20

标签: bash docker ssh docker-container

我有两个通过Docker Compose文件配置的Docker容器。

  • Docker Container A - (teamcity-agent)
  • Docker Container B - (构建工具)

两者都很好。但作为TeamCity中构建过程的一部分 - 我希望代理(容器A)运行Docker容器B上的bash脚本(只有B可以运行此脚本)。

我尝试使用Team City中的SSH构建步骤进行设置,但我拒绝连接。

进一步阅读它表明SSH没有在容器中启用,我不应该尝试SSH到容器中。

那么我怎样才能让容器A在容器B上运行脚本并在A上看到脚本的输出?

最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

不修改应用程序本身的唯一方法是通过SSH。你不能SSH到一个容器是完全错误的。我使用SSH到数据库容器来在其中运行数据库导出。

首先确保在B上安装了openssh-server。然后你必须在A和B之间建立无密码连接。

然后确保将您的容器链接到docker-compose文件中,这样您就不需要公开SSH端口了。

要在容器B的Dockerfile中添加的代码段

RUN apt-get install -q -y openssh-server
ADD id_rsa.pub /home/ubuntu/.ssh/authorized_keys
RUN chown -R ubuntu:ubuntu /home/ubuntu/.ssh ; \
  chmod 700 /home/ubuntu/.ssh ; \
  chmod 600 /home/ubuntu/.ssh/authorized_keys

此外,您可以使用主机中的crontab中的docker exec在容器外部运行脚本。但我认为你并不是在寻找这种极端的解决方案。

我可以通过评论帮助你

此致