【问题标题】:Getting error on running docker-compose up运行 docker-compose up 时出错
【发布时间】:2021-06-13 23:11:55
【问题描述】:

我正在尝试通过 docker-compose 运行我的 python 代码。它不是烧瓶应用程序,所以我没有在我的 yml 文件中提供端口号。这是我的 docker-compose.yml 文件:

version: '3'

services:   
  main:
    build: .
    image: ddn4
    environment:
      - neo4j_uri=bolt://54.209.5.141:7687
      - neo4j_username=neo4j
      - password=provis234
      - blob_conn_string=httpsxxxx

main.py 是我的 python 代码。运行后

docker-compose 构建

,我知道图像已成功构建。此外,在检查使用

泊坞窗图片

,我看到镜像ddn4构建成功了。但是在运行时

码头工人组成

,我收到以下错误:

main_1 |错误 !!!!文件例外: 主要_1 | 'function' 对象不可下标 主要_1 |错误 !!!!: 主要_1 | 'NoneType' 对象没有属性 'columns' dd-n4_main_1 exited with code 0

dd-n4 是我的 dockerfile、requirements.txt、python 代码和 docker-compose.yml 文件的位置。

这是似乎导致错误的变量的 python 代码:

def neo4jconn():
    """
    This code is to create a connection string for connecting to Neo4j
    """
    try:
       
        neo_conn = Graph(os.getenv['neo4j_uri'], user=os.getenv['neo4j_username'], password=os.getenv['password'])
        return neo_conn
        

    except Exception as ex:
        print('Error !!!!:')
        print(ex)

【问题讨论】:

  • 你应该只使用 docker-compose up 来运行 docker-compose.yml 文件,如果你想重新构建它添加 --build flas,它看起来像:docker-compose up --build.does it work在本地成功?你的 docker 文件是什么?
  • 我的 dockerfile 在本地成功运行。我认为问题在于我在 python 上使用的环境变量。我在使用 docker-compose up --build 时遇到同样的错误
  • 您可以在您的主机 Python 环境中运行此代码吗? (我通常希望os.getenv() 是一个函数,os.environ[] 是一个字典,但是在不涉及 Docker 的虚拟环境中运行相同的代码时,您应该会看到同样的错误。)

标签: python-3.x docker docker-compose dockerfile


【解决方案1】:

您不能同时使用 build 和 image 语句。 如果您使用 build 将自动使用构建的图像!

【讨论】:

  • 我得到这个是因为引用了 python 环境变量而不是因为 docker-compose 命令。你能解释一下吗?
  • 参考?你的意思是你的环境变量在你的容器中不可用?
  • 我已经在我的 yaml 文件中添加了环境变量,如上所示。我不确定是什么导致了错误。
  • Compose image: documentation 描述了如果你同时拥有build:image: 会发生什么;在某些情况下这是一个合理的组合。
【解决方案2】:

尝试使用 docker-compose up 运行 docker-compose.yml 文件,如果你想重新构建它添加 --build 标志,分离模式添加 -d,它看起来像:

docker-compose up -d --build

您可以将所有环境变量传递给 .env 文件并额外安装 python-dotenv:

pip install python-dotenv

并将其传递给 docker-compose:

  youre_service:
    image: image:1.7
    container_name: container
    env_file:
      - .env

【讨论】:

    【解决方案3】:

    我能够通过更新我的 python 代码以使用 os.getenv() 而不是 os.getenv[] 来解决它。谢谢@大卫迷宫

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      相关资源
      最近更新 更多