繁体   English   中英

docker-compose 无法连接 mysql

[英]docker-compose unable to connect mysql

我看到了这个问题的多个解决方案,但我仍然无法取得进展,因此发布这个问题我有 react+django+mysql 应用程序,我想将它部署到 docker,但是当我尝试做我的 sql 图像时没有创建,它说数据库使用和图像,跳过。 在此处输入图像描述 但我看到没有为 mysql 创建图像(它有一个但我强制删除,所以它可以创建新的),我尝试了这里给出的解决方案并尝试在命令下运行

docker 运行 mysql -h 127.0.0.1 -P 3306

但它要求我提供密码、root 密码等,我出了什么问题? 下面是我的日志在此处输入图像描述

PFb 我的 docker-compose.yaml

version: '3.2'

services:
  db:
    image: mysql:8.0
    ports:
      - '3302:3306'
    environment:
       MYSQL_DATABASE: 'motor_vehicle_collision'
       MYSQL_USER: 'creditshelf_user'
       MYSQL_PASSWORD: '12345678'
       MYSQL_ROOT_PASSWORD: '12345678'
    networks:
      - db-net

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/motor_vehicle_crash
    ports:
      - "5000:8000"
    depends_on:
      - db

  frontend:
    restart: always
    command: npm start
    container_name: front
    build:
      context: ../../../react code/collision-UI/collision-info
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    stdin_open: true
    depends_on:
      - web
    networks:
      - db-net



networks:
      db-net:
        driver: bridge

下面是我的 python 项目 Dockerfile

FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /collision_bike_info
WORKDIR /collision_bike_info
ADD requirements.txt /collision_bike_info/
RUN pip install -r requirements.txt
ADD . /collision_bike_info/

在我的 settings.py 下面

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'motor_vehicle_collision',
        'USER': 'creditshelf_user',
        'PASSWORD': '12345678',
        'HOST': 'localhost',
        'PORT' : '3306'
        # 'NAME': BASE_DIR / 'db.sqlite3',
    }
}

解决方案:

下面的答案对我有用,但是我现在遇到了不同的问题,我的 sql 说

(1045,'无法加载插件caching_sha2_password:/usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so:无法打开共享 object 文件:没有这样的文件或目录')

from google I got to know it is due to new mysql version (8.0 onwards) so either I need to downgrade my sql image or I need to change password policy for my user, how do I change policy this user of my sql docker? 如果我降级它说 unkow host db f0r mysql,我该怎么办? 在此处输入图像描述

以免先理顺一些术语:

image - 是可运行事物的图像,例如 MySql 或 Python。 它是只读的。 您无法连接到映像,但可以从映像启动容器。 容器是做什么工作的。 容器基于图像加上它的可写层。 因此,即使您停止并重新启动,所有更改都会保存在这些可写层中。

所以db uses an image意味着 docker compose 不必为您的 db 容器构建新图像。 但只需要使用您定义的参数启动容器。 同时 docker 作曲家必须使用您的 Dockerfile 构建web图像。

When you do docker run mysql.... you are just spinning up new container from MySql image without using docker compose, thus it is asking all the parameters you've entered in your docker compose file for db container. 不要这样做,因为您使用的是 docker-compose。

根据日志can't connect to local mysql through socket您的 python 脚本尝试连接到本地主机上的 mysql。 但是,您的 docker 文件将 MySql 定义为db

所以db应该是你 web 试图找到 mysql 的主机。 另一件事是您的 web 不使用相同的networks:与其他吊舱一样。

ps你可能想在继续之前检查你已经运行了哪些继续器。 停止所有 docker 编写并检查 rest。 像这样:

  • docker-compose down - 在 composer 文件中定义的停止和删除容器。
  • docker ps - 查看正在运行的容器。 应该没有。
  • docker ps -a - 查看所有容器,包括停止的容器。
  • docker stop {container id}停止某事。
  • docker rm {container id}删除容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM