Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Docker容器未连接到Docker容器数据库_Mysql_Docker_Docker Compose_Mariadb_Dockerfile - Fatal编程技术网

Mysql Docker容器未连接到Docker容器数据库

Mysql Docker容器未连接到Docker容器数据库,mysql,docker,docker-compose,mariadb,dockerfile,Mysql,Docker,Docker Compose,Mariadb,Dockerfile,我有两个docker容器正在使用docker compose构建。一个是mariadb,另一个是使用python制作的web api。当我启动mariadb容器,然后从我的桌面运行应用程序时,一切都很好。但是,当我运行这两个容器时,会出现以下错误: pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)&quo

我有两个docker容器正在使用docker compose构建。一个是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"]
数据库的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 Compose

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容器时,它拒绝连接,因为从
PWU657API
连接到
127.0.0.1
意味着这台机器本身,您应该将python中的数据库连接行更改为:

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

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