【问题标题】:Connection refused to mongodb after running docker compose up运行 docker compose up 后连接拒绝 mongodb
【发布时间】:2023-01-04 21:12:38
【问题描述】:

在运行 docker compose up 并进入 0.0.0..:8000/docs 以在 fastapi 项目中使用 get 方法后,我收到以下错误,

.env 文件内容

MONGODB_URL = mongodb://localhost:27017/

MONGO_HOST = "0.0.0.0"
MONGO_PORT = 27017
MONGO_USER = ""
MONGO_PASS = ""
DATABASE_NAME = "myDatabase"
TEST1_COLLECTION="TEST1_COLLECTION"
TEST2_COLLECTION="TEST2_COLLECTION"
TEST3_COLLECTION="TEST3_COLLECTION"

Dockerfile 内容:

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./requirements.txt /app/requirements.txt 
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app/app
WORKDIR /app/app/
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml 内容

version: "3.9"
services:
 app:
  build: .
  command: uvicorn app.main:app --host 0.0.0.0
  ports:
    - "8000:8000"
  depends_on:
  - db
 db:
   image: mongo
   ports:
     - "27017:27017"
   volumes:
     - ./data:/data/db

我做错了什么,因为我只需要在 docker 中使用环境变量并运行应用程序?

【问题讨论】:

  • 您真的使用了空密码和用户名,还是只是为了问题将其删除?
  • mongodb://db:27017/localhost指的是在容器内部,你需要通过docker的网络引用其他正在运行的容器。
  • 您似乎附加了一个难以阅读的 PNG 文件来代替错误消息;你可以 edit 这个问题来代替包含错误的文本吗? MONGODB_URL=localhost 在我看来很可疑,因为它会告诉 app 容器连接到自身而不是 db 容器;看看pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused

标签: python docker docker-compose fastapi


【解决方案1】:

我相信@MatsLindh 可能是对的。您需要在 Docker 内部网络(在您的情况下为 db 容器)内通过运行 MongoDB 实例来解决另一个容器的主机。 尝试使用MONGODB_URL = mongodb://db:27017/

【讨论】:

    【解决方案2】:

    在 docker-compose 中添加 container_name 到 db 服务,然后在 python 代码中连接时使用它的名称作为主机。

    例如。

    mongodb://root:example@container_name:27017/?authMechanism=DEFAULT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 2019-01-02
      • 2021-08-29
      • 2020-09-08
      • 1970-01-01
      • 2017-04-12
      • 2021-10-12
      • 1970-01-01
      相关资源
      最近更新 更多