【问题标题】:ArangoDBs python dockerArangoDBs python 码头工人
【发布时间】:2019-02-19 05:33:09
【问题描述】:

使用 Docker,从 Python 初始化 ArangoDB

尝试了不同的身份验证方式,总是得到“错误:数据库未初始化且未指定密码选项”

不确定如何格式化/连接 ArangoDB

import docker
client=docker.from_env()
img=client.images.pull("arangodb:latest")
[31]:

arangocommand="-e ARANGO_RANDOM_ROOT_PASSWORD=1"
​
db=client.containers.run(img,command=arangocommand)

---------------------------------------------------------------------------
ContainerError                            Traceback (most recent call last)
<ipython-input-31-c5425f08f615> in <module>
      1 arangocommand="-e ARANGO_RANDOM_ROOT_PASSWORD=1"
      2 
----> 3 db=client.containers.run(img,command=arangocommand)

~/anaconda3/envs/dockerdb/lib/python3.7/site-packages/docker/models/containers.py in run(self, image, command, stdout, stderr, remove, **kwargs)
    793         if exit_status != 0:
    794             raise ContainerError(
--> 795                 container, exit_status, command, image, out
    796             )
    797 

ContainerError: Command '-e ARANGO_RANDOM_ROOT_PASSWORD=1' in image 'sha256:d41deeeb6f1189a07e3e567bd104c82b53350b67eaadbe044fae9c1158cd8c1c' returned non-zero exit status 1: b'error: database is uninitialized and password option is not specified \n  You need to specify one of ARANGO_ROOT_PASSWORD, ARANGO_NO_AUTH and ARANGO_RANDOM_ROOT_PASSWORD\n

'

正在寻找一种简单而可靠的方法来从 Python 连接到 Docker 容器中的 ArangoDB。然后,我怎样才能继续使用 Python 中的 ArangoDB Docker,而不必考虑它是在 Docker 容器中运行的。浏览器

导入 dockerpy

然后继续只使用 dockerpy 库

【问题讨论】:

    标签: python docker arangodb


    【解决方案1】:

    根据docker-pydocumentation,有一个名为environment的参数应该负责在容器运行时应该在容器内传递的环境变量。

    environment (dict or list) – 在容器内设置的环境变量,作为字典或格式为 ["SOMEVARIABLE=xxx"] 的字符串列表。

    所以你必须将脚本修改为以下内容:

    import docker
    
    client=docker.from_env()
    
    img=client.images.pull("arangodb:latest")
    variables=["ARANGO_RANDOM_ROOT_PASSWORD=1"]
    db=client.containers.run(img,environment=variables)
    

    然后在执行之后你可以检查容器的 docker 日志,这表明容器已经启动并正在运行

    automatically choosing storage engine
    ===========================================
    GENERATED ROOT PASSWORD: XXXXXXXXXXXXXXXX
    ===========================================
    ...
    2019-02-19T06:22:31Z [1] INFO using storage engine rocksdb
    2019-02-19T06:22:31Z [1] INFO {cluster} Starting up with role SINGLE
    ...
    2019-02-19T06:22:31Z [1] INFO {authentication} Authentication is turned on (system only), authentication for unix sockets is turned on
    2019-02-19T06:22:32Z [1] INFO using endpoint 'http+tcp://0.0.0.0:8529' for non-encrypted requests
    

    关于command 参数,它用于在运行容器时需要覆盖图像的原始CMD 时使用。

    command (str or list) – 在容器中运行的命令。

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2019-07-22
      • 2019-02-05
      相关资源
      最近更新 更多