我正在尝试对一个依赖于另一个的 2 个 dotnet 控制台应用程序进行 dockerize。 当我运行第一个容器时,我需要它在主机上运行另一个容器,向它的 stdin 插入一个参数并等待它结束作业并退出。 实现这一目标的最佳解决方案是什么?
在容器内运行容器在我看来是一个糟糕的解决方案, 我还考虑过在主机上使用网络服务器(nginx 或其他东西)管理另一个进程,该进程将请求作为 http 请求获取并在主机中执行 docker run 命令,但我确信有更好的解决方案(在这样,网络服务器将只在主机上运行,而不是在容器内)。
还有 this solution,但似乎存在重大安全问题。
我也尝试过使用 Docker.DotNet 库,但它对我的问题没有帮助。 最佳解决方案的任何想法? 提前致谢。
编辑:
我将使用 docker compose 但问题是第二个容器没有一直运行和监听,类似于它被调用的 Hello-World 容器,执行它的工作并退出。
EDIT2:修复
我已经将 redis 实现为消息代理以在不同服务之间进行通信,虽然它稍微改变了需求(容器将始终运行并监听 redis),但它帮助我解决了问题。
答案 0 :(得分:0)
我不确定我是否正确理解您需要做什么,但如果您只需要并行启动两个容器,我能想到的最简单方法是 docker-compose。
另一种方法是使用独立启动容器的 python 或 bash/bat 脚本(在 python 中,您可以使用 Docker API 或使用 subprocess 模块手动执行)。这允许您执行其他操作(如在一个容器的 stdin 上写入,如您所述)。