我正在创建一个应用程序,允许用户上传视频文件,然后对这些文件进行一些处理。
我有两个容器。
-
Nginx
为网站提供服务的容器,用户可以在其中上传视频文件。
- 视频处理容器具有
FFmpeg
并安装了一些其他处理工具。
我想要实现什么。我需要容器 1 才能在容器 2 上运行 bash 脚本。
据我所知,一种可能性是让它们通过 API 通过 HTTP 进行通信。但随后我需要在容器 2 中安装一个 Web 服务器并编写一个 API,这似乎有点大材小用。
我只想执行 bash 脚本。
有什么建议么?
您有几个选择,但首先想到的两个是:
- 在容器1中,安装Docker CLI并绑定挂载
/var/run/docker.sock
(您需要从
启动容器时的主机)。然后,在容器内,您
应该可以使用docker
针对绑定安装的命令
就像您从主机执行它们一样(您也可以
需要chmod
容器内的套接字允许非 root
用户执行此操作。
- 你可以安装
SSHD
在容器 2 上,然后ssh
从容器 1 中进入并运行脚本。这样做的优点是,您不需要在容器内部进行任何更改,因为它们是在 Docker 中运行而不是在裸机中运行。缺点是您需要将 SSHD 设置添加到 Dockerfile 或启动脚本中。
我能想到的大多数其他想法只是选项(2)的变体,用其他一些工具代替了 SSHD。
另请注意,Docker 网络有点奇怪(至少在 Mac 主机上),因此您需要确保容器使用相同的 docker 网络并且能够通过它进行通信。
Warning:
完全清楚的是,do not在实验室或严格控制的开发环境之外使用选项 1。它采用一个安全套接字,该套接字对 Docker 运行时具有完全权限host,并从 a 授予未经检查的访问权限容器。这样做可以轻松地突破 Docker 沙箱并危害主机系统。我认为它唯一可以接受的地方是作为完整堆栈集成测试设置的一部分,该设置仅由开发人员临时运行。在某些非常特定的情况下,这是一种有用的捷径,但其缺点也不容忽视。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)