【问题标题】:Docker container not connecting to docker container dbDocker 容器未连接到 docker 容器 db
【发布时间】:2021-07-18 14:56:21
【问题描述】:

我有两个使用 docker compose 构建的 docker 容器。一个是 mariadb,另一个是使用 python 制作的 web api。当我启动 mariadb 容器然后从我的桌面运行应用程序时,一切正常且花花公子。但是,当我运行这两个容器时,我得到了错误:

 pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")

我已经尝试了各种方法来让它运行,但我似乎无法弄清楚。 在我的 SQL 设置中,我已经完成了:

CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';

python中连接db的行是:

db = pymysql.connect(host="127.0.0.1", user="USERNAME", password="PASSWORD", database="cs3743_pwu657", port=3306)

似乎我的 api 容器由于某种原因无法到达 mariadb 容器,或者由于某种原因它没有被允许进入。我不确定我需要改变什么来解决这个问题。

用于 api 的 Docker 文件

FROM pwu657/docker-api
WORKDIR /app
COPY src ./src
RUN pip3 install -r ./src/requirements.txt
RUN pip3 install Werkzeug
EXPOSE 8080
CMD ["python3", "./src/webapi.py"]

用于 DB 的 Docker 文件

FROM mariadb
COPY ./setup.sql /docker-entrypoint-initdb.d
RUN chmod +x /docker-entrypoint-initdb.d/setup.sql
ENV MYSQL_ROOT_PASSWORD=howdy
CMD ["mysqld"]

Docker 编写

version: "3.9"
volumes:
  pwu657-db-vol: {}

services:
  pwu657-db:
    build:
      context: .
      dockerfile: Dockerfile-db
    ports:
      - "3306:3306"
    volumes:
      - pwu657-db-vol:/var/lib/mysql

  pwu657-api:
    build:
      network: host
      context: .
      dockerfile: Dockerfile-api
    restart: on-failure
    depends_on:
      - pwu657-db
    ports:
      - "8080:8080"
    links:
      - "pwu657-db"

就像我说的,当我从我的 IDE 运行 api 时连接没有问题,但是当我启动 docker 容器时它拒绝连接

【问题讨论】:

  • 在 docker(-compose) 世界中,127.0.0.1 与运行代码/服务/任何内容的容器相关。由于您将 db 端口映射到本地机器(即 docker-compose.yml 文件中的 3306:3306),因此可以从您自己的操作系统以 localhost 访问此端口。当您在您的 api 容器中时,不再是。 docker-compose 为您管理主机名。只需在您的 python 连接配置中将 127.0.0.1 替换为 => pwu657-db 即可解决您的问题。
  • 我实际上刚刚开始回答我自己的问题。我确实做到了,而且效果很好,但直到现在我才回来回答。

标签: mysql docker docker-compose mariadb dockerfile


【解决方案1】:

由于从pwu657-api连接到127.0.0.1意味着这台机器本身,你应该在python中将你的数据库连接线更改为:

db = pymysql.connect(host="pwu657-db", user="USERNAME", password="PASSWORD", database="cs3743_pwu657", port=3306)

【讨论】:

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