从一个docker容器在另一个容器上运行命令是一种好的做法吗?

从一个docker容器在另一个容器上运行命令是一种好的做法吗?,docker,docker-compose,Docker,Docker Compose,从一个docker容器在另一个容器上运行命令是一种好的做法吗 我有一个测试docker,需要运行java-jar命令在另一个docker上运行应用程序 docker_1: - tests docket_2: - app1.jar - app2.jar “测试”应该运行“app1.jar”和“app2.jar” docker_1如何通过ssh连接到docker_2并运行java命令 这是一个好的做法还是沟通的开销不值得?这不是一个好的做法。这在技术上很难设置,而且它会在应用程序中添加

从一个docker容器在另一个容器上运行命令是一种好的做法吗

我有一个测试docker,需要运行java-jar命令在另一个docker上运行应用程序

docker_1:
 - tests

docket_2:
  - app1.jar
  - app2.jar
“测试”应该运行“app1.jar”和“app2.jar”

docker_1如何通过ssh连接到docker_2并运行java命令


这是一个好的做法还是沟通的开销不值得?

这不是一个好的做法。这在技术上很难设置,而且它会在应用程序中添加对Docker的依赖(在非Docker开发环境中,您不会这样做)。如果为此使用
docker exec
,则实际上需要在主机上具有不受限制的根级别权限

尝试使用ssh作为传输需要在某处设置凭据,这很棘手(您确实不应该在Dockerfile或其他任何地方编写明文根密码)。要让服务器端运行,您需要在一个容器中运行多个进程(这也很棘手),或者让sshd成为主容器进程(不清楚Docker在这里有什么好处)

您几乎总是希望使用某种网络API在容器之间进行通信。在这个设置中,您可以运行三个容器,一个用于两个应用程序,一个用于测试客户机。这两个应用程序容器将运行长期运行的HTTP服务器(可能它们基于Tomcat或Spring Boot),然后测试容器将对其中一个或两个进行HTTP调用

有时,容器中的一个程序直接运行另一个程序是有意义的。当它是一个预先构建的短时间运行的命令行工具,专门作用于本地文件时,最常发生这种情况;构建HTTP facade可能比项目的其余部分更费劲。在这些情况下,支持程序需要与调用代码位于同一映像中,包括它需要的任何语言运行时或共享库