gpt4 book ai didi

mysql - 构建 Docker mysql 数据库后抛出 OperationalError

转载 作者:行者123 更新时间:2023-11-29 05:48:32 25 4
gpt4 key购买 nike

我试图通过遵循此 Link 来使用 Docker + Nginx + MySQL 运行 Django 项目成功构建后,通过运行

docker-compose up --build

这是我的setting.py 数据库连接

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'smartCut',
'USER': 'antu',
'PASSWORD': 'secure',
'HOST': 'mysql',
'PORT': 3306,
}
}

如果我使用HOST: 'mysql'

(1045, "Access denied for user 'antu'@'172.25.0.3' (using password: YES)")

错误但是如果我使用如果我使用 HOST: 'localhost'

(2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)")

此外,该项目在管理面板中找不到静态文件。

我做错了什么?

更新:

$ docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                               NAMES
07a5a13e15a1 projectone_web "nginx -g 'daemon of…" 16 seconds ago Up 8 seconds 0.0.0.0:8888->80/tcp web
2431afe3eed2 projectone_python "uwsgi --ini /uwsgi.…" 21 seconds ago Up 17 seconds python
83572753b4ae projectone_mysql "docker-entrypoint.s…" 56 seconds ago Up 52 seconds (healthy) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

docker-compose.yml

version: "2.4"
services:
web:
container_name: web
build: ./docker/nginx
ports:
- 8888:80
volumes:
- ./app:/var/www/html
working_dir: /etc/nginx
links:
- python
python:
container_name: python
build: ./docker/python
volumes:
- ./app:/var/www/html
working_dir: /var/www/html
depends_on:
mysql:
condition: service_healthy
mysql:
build: docker/mysql
container_name: mysql
ports:
- 3306:3306
volumes:
- data-volume:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secure
- MYSQL_DATABASE=smartCut
healthcheck:
test: "exit 0"

volumes:
data-volume:

$ docker logs 83572753b4ae

2019-07-21T10:00:06.327977Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2019-07-21T10:00:06.328151Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.16) starting as process 1
2019-07-21T10:00:06.332333Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2019-07-21T10:00:12.001312Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-07-21T10:00:12.150341Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2019-07-21T10:00:12.290955Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.16' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
2019-07-21T10:00:12.817464Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

最佳答案

如前所述,您应该在数据库配置中使用 mysql 作为主机,使用 root 作为 USER :

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'smartCut',
'USER': 'root',
'PASSWORD': 'secure',
'HOST': 'mysql',
'PORT': 3306,
}
}

mysql 将被解析为 mysql 容器 IP,因为来自 compose 的容器将连接到同一网络。

您还使用环境变量为您的 mysql 容器设置了 root 密码 - MYSQL_ROOT_PASSWORD=secure 所以 root 必须作为用户使用。

如果你想创建新用户,你可以使用 MYSQL_USER, MYSQL_PASSWORD 环境变量 - 引用可以在 mysql docker hub 中找到.相应地修改你的 docker-compose :

version: "2.4"
services:
web:
container_name: web
build: ./docker/nginx
ports:
- 8888:80
volumes:
- ./app:/var/www/html
working_dir: /etc/nginx
links:
- python
python:
container_name: python
build: ./docker/python
volumes:
- ./app:/var/www/html
working_dir: /var/www/html
depends_on:
mysql:
condition: service_healthy
mysql:
build: docker/mysql
container_name: mysql
ports:
- 3306:3306
volumes:
- data-volume:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secure #root password
- MYSQL_DATABASE=smartCut #this database will be created for MYSQL_USER
- MYSQL_USER=antu
- MYSQL_PASSWORD=secure #your user password
healthcheck:
test: "exit 0"

volumes:
data-volume:

关于mysql - 构建 Docker mysql 数据库后抛出 OperationalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com