使用python设置dockerized Couchdb

问题描述 投票:3回答:2

长话短说我需要扩展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上执行

python docker subprocess environment-variables couchdb
2个回答
2
投票

谜团已揭开

该图像有一个自定义入口点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
)

-1
投票

... couchdb启动没有预先设置的管理员(我的意思是我可以做任何事情而无需登录)...

如果不修改CouchDB的安全配置,这就是The Admin Party,它是默认配置。如果您查看文档,它将开始有意义。

© www.soinside.com 2019 - 2024. All rights reserved.