我有一个帮助容器和一个app容器。
帮助程序容器通过git处理代码通过app容器挂载到共享挂载。
我需要帮助程序容器检查克隆代码中的package.json
或requirements.txt
,如果存在运行npm install
或pip install -r requirements.txt
,则存储依赖项共享安装。
Thing是npm命令和/或pip命令需要从app容器运行,以使helper容器尽可能通用且不可知。
一种解决方案是将docker套接字挂载到帮助程序容器并运行docker exec <command> <app container>
,但如果我在一台主机上有数千个此类应用程序,该怎么办呢?
是否会有数百个容器同时访问docker socket的问题?还有更好的方法吗?获取在另一个容器上运行的命令?
答案 0 :(得分:1)
没有&#34;容器到容器&#34;内部沟通层,如&#34; ssh&#34;。在这方面,容器与2个不同的VM一样独立(通常在网络部分旁边)。
您可以采用通常的方式,在&#34;接收&#34;上安装opensshd-server。服务器,仅将其配置为基于密钥。您无需将端口导出到主机,只需使用docker-internal网络连接到端口。在&#39;主叫服务器上部署ssh私钥&#39;并将公钥输入到接收服务器上的.ssh / authorized_keys中。在容器启动时间(卷装入)期间,您不要在图像中保留秘密(构建时间)。
也可能在.ssh / config中创建一个ssh-alias,并将HostVerify设置为no,因为容器可以重建。然后做
ssh <alias> your-command
答案 1 :(得分:0)
找到了我寻找的更好的方式:-)。
使用supervisord并运行xml rpc服务器使我能够运行类似:
supervisorctl -s http://127.0.0.1:9002 -utheuser -pthepassword start uwsgi
supervisorctl -s http://127.0.0.1:9002 -utheuser -pthepassword start uwsgi
在帮助程序容器中,这将连接到在应用程序容器上的端口9002上运行的rpc服务器,并执行可能类似的程序块;
[program:uwsgi]
directory=/app
command=/usr/sbin/uwsgi --ini /app/app.ini --uid nginx --gid nginx --plugins http,python --limit-as 512
autostart=false
autorestart=unexpected
stdout_logfile=/var/log/uwsgi/stdout.log
stdout_logfile_maxbytes=0
stderr_logfile=/var/log/uwsgi/stderr.log
stderr_logfile_maxbytes=0
exitcodes=0
environment = HOME="/app", USER="nginx"]
这正是我所需要的!
对于任何发现此问题的人,您可能需要在app容器上使用supervisord.conf看起来像:
[supervisord]
nodaemon=true
[supervisorctl]
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[inet_http_server]
port=127.0.0.1:9002
username=user
password=password
[program:uwsgi]
directory=/app
command=/usr/sbin/uwsgi --ini /app/app.ini --uid nginx --gid nginx --plugins http,python --limit-as 512
autostart=false
autorestart=unexpected
stdout_logfile=/var/log/uwsgi/stdout.log
stdout_logfile_maxbytes=0
stderr_logfile=/var/log/uwsgi/stderr.log
stderr_logfile_maxbytes=0
exitcodes=0
environment = HOME="/app", USER="nginx"]
您可以设置inet_http_server来侦听套接字。您可以链接容器以便能够通过主机名访问它们。