使用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解释器

使用docker 部署python 项目

PyCharm 在 Docker 中添加远程 Python 解释器

Docker + Python使用 Docker 创建容器化 Python 应用程序(入门指南)

将 Docker 与 Python 诗歌一起使用?