问题描述
我们正在尝试容器化我们的应用程序。结果,数据库将很快成为容器,它将成为网桥网络的一部分。该网络上的容器可以轻松访问数据库端口。但是无法从网络外部访问这些端口。现在,我当然可以发布所有端口,但是这有点违反了桥接网络的目的,我也可以在主机网络上运行它们。因此,我试图避免这种情况。
但是仍然需要不时对数据库执行一些维护任务。例如。创建新的表格/索引等。
我当前的策略是编写一个带有connect命令的命令行工具。此connect命令使用如下的dockerfile构建一个Docker容器:
FROM python:3.8
workdir /tmp
copY requirements.txt setup.py ./
RUN pip3 install -r requirements.txt \
&& rm /tmp/*
RUN mkdir /app
workdir /app
copY . .
RUN pip3 install -e .
ENTRYPOINT [ "/bin/bash" ]
因此它将导入项目并使用pip进行安装。然后,它以交互模式运行此docker容器(还将安装配置并将其连接到此connect
命令的参数所指定的网络。
所以当我跑步
manage connect my_net
我被扔到连接到my_net
且已安装CLI manage
的容器中。这使我可以运行一次性命令(脚本)来管理该网络上的数据库。
问题是:我应该如何为此编写测试?
我使用click构建CLI,因此可以使用CliRunner
调用命令。但是,如何处理由docker run命令的-it
标志引发的tty,该标志由connect函数使用os.system
调用?
我想将更多命令传递给该tty并观察输出。有没有办法以某种方式将tty捕获为python对象?我唯一发现的是这个https://docs.python.org/3/library/pty.html,它似乎没有用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)