【问题标题】:Running a Bash Script from (on Docker Container B) from Docker Container A从 Docker 容器 A(在 Docker 容器 B 上)运行 Bash 脚本
【发布时间】:2017-02-21 04:38:53
【问题描述】:

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

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

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

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

进一步阅读表明,容器中没有启用 SSH,我不应该真的尝试通过 SSH 进入容器。

那么如何让容器 A 在容器 B 上运行脚本并在 A 上查看脚本的输出?

这方面的最佳做法是什么?

【问题讨论】:

  • 我建议使用反向代理(nginx 是一个很好的代理)来解决您的 docker-containers 之间的连接问题。并通过双方的一些微服务获取数据。
  • 我不确定您是否在 docker 解决方案中尝试过 docker。在此处查看 docker-in-docker 部分:hub.docker.com/_/docker

标签: bash docker ssh docker-container


【解决方案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 在容器外运行脚本。但我认为你不是在寻找这种极端的解决方案。

我可以通过 cmets 帮助你

问候

【讨论】:

  • 你有openssh的设置指南吗?我已尝试关注一些,但在尝试连接时一直被拒绝。
  • 您需要做的第一件事是手动执行以下步骤:liberiangeek.net/2014/08/…。我的意思是容器 B 中的 docker exec 配置 ssh 服务器和容器 A 中的 docker exec 用于 ssh 客户端和密钥生成。一旦你可以手动连接,然后在 docker 文件中自动连接。
  • 谢谢,这与我之前尝试的类似,但我认为我的问题在于尝试为 root 用户执行无密码 SSH。刚刚试了一下,我现在可以运行 SSH 了 :)
  • 优秀。我认为这是对社区的良好贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多