使用python设置dockerized Couchdb
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python设置dockerized Couchdb相关的知识,希望对你有一定的参考价值。
长话短说我需要扩展apache/couchdb/ Dockerfile,以便进行一些魔术处理以获得2个值(用户名和密码),然后使用admin启动couchdb实例。
通常你会通过运行docker run ... -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password couchdb
来做到这一点,但我可能事先不知道这些值,我希望每次容器启动时从某个地方检索这些值。
我做了一个看起来或多或少像这样的Dockerfile:
FROM couchdb:2.1.1
RUN apt-get update --force-yes && apt-get install -y python3
RUN curl https://bootstrap.pypa.io/get-pip.py | python3
ADD . /app
RUN pip install -r /app/requirements.txt
CMD ["python3", "/app/start_couch.py"]
start_couch.py
看起来像这样:
import os
import subprocess
user,password = very_complex_stuff()
os.environ['COUCHDB_USER'] = user
os.environ['COUCHDB_PASSWORD'] = password
subprocess.call(["/opt/couchdb/bin/couchdb"], env=os.environ)
然而,当构建并运行我的图像时,couchdb启动时没有预设的管理员(我的意思是我可以在没有登录的情况下完成所有操作)
有人能指出我做错了什么或提出了不同的解决方案吗?
标准是管理员凭据来自python脚本(函数),它需要在docker run
上执行
谜团已揭开
该图像有一个自定义入口点ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"]
,所以-e
开关在.sh
执行之前设置env变量然而我的python脚本稍后运行。
我通过更改添加到Dockerfile来解决此问题
ENTRYPOINT ["tini", "--"]
CMD ["python3", "/app/start_couch.py"]
并从python调用沙发像这样:
subprocess.call(
["/docker-entrypoint.sh", "/opt/couchdb/bin/couchdb"],
env=os.environ
)
... couchdb启动没有预先设置的管理员(我的意思是我可以做任何事情而无需登录)...
如果不修改CouchDB的安全配置,这就是The Admin Party,它是默认配置。如果您查看文档,它将开始有意义。
以上是关于使用python设置dockerized Couchdb的主要内容,如果未能解决你的问题,请参考以下文章
PyCharm:使用 docker 容器设置 python 解释器,但使用 `--cpuset-cpus`
PyCharm 在 Docker 中添加远程 Python 解释器