mysql - Docker:未创建数据库
问题描述
我正在运行我的docker-compose.yml
文件,当我运行时
docker-compose --verbose up --build
出现错误:Host 'websites_backend_1.websites_default' is not allowed to connect to this MySQL server
那是因为数据库没有正确构建。当我查看数据库的日志时,我看到:
{"log":"2020-07-17T20:47:32.048295Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.\n","stream":"stderr","time":"2020-07-17T20:47:32.048692809Z"}
{"log":"2020-07-17T20:47:32.048574Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.\n","stream":"stderr","time":"2020-07-17T20:47:32.048985478Z"}
{"log":"2020-07-17T20:47:32.053617Z 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.\n","stream":"stderr","time":"2020-07-17T20:47:32.054070073Z"}
{"log":"2020-07-17T20:47:32.074099Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.21' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.\n","stream":"stderr","time":"2020-07-17T20:47:32.07428149Z"}
{"log":"2020-07-17T20:57:31.584660Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user \u003cvia user signal\u003e. Shutting down mysqld (Version: 8.0.21).\n","stream":"stderr","time":"2020-07-17T20:57:31.584841262Z"}
{"log":"2020-07-17T20:57:32.156022Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21) MySQL Community Server - GPL.\n","stream":"stderr","time":"2020-07-17T20:57:32.156200018Z"}
我的./mysql
目录- "./mysql:/var/lib/mysql"
是空的
docker container ls
生产
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b418818c780 websites_frontend "docker-entrypoint.s…" 49 seconds ago Up 48 seconds 0.0.0.0:3002->3000/tcp websites_frontend_1
389d86543214 websites_backend "python3 manage.py r…" 50 seconds ago Up 49 seconds 0.0.0.0:8000->8000/tcp websites_backend_1
03ab9131cf37 mysql:latest "docker-entrypoint.s…" 24 minutes ago Up 50 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp websites_db_1
d03eb504da0f memcached "memcached '-m 64'" About an hour ago Up 50 seconds 0.0.0.0:11211->11211/tcp websites_cache_1
当我做docker exec -it websites_db_1 bash
我能做show databases
但看不到my_database
在本地,我的 docker 项目正在运行,但在我的服务器上却没有。
为什么会这样?我想不通。
docker-compose.yml
:
version: "3.2"
services:
backend:
build: ./backend
volumes:
- ./backend:/app/backend
ports:
- "8000:8000"
stdin_open: true
tty: true
command: python3 manage.py runserver 0.0.0.0:8000
depends_on:
- db
- cache
links:
- db
frontend:
build: ./frontend
volumes:
- ./frontend:/app
#One-way volume to use node_modules from inside image
- /app/node_modules
ports:
- "3002:3000"
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
depends_on:
- backend
tty: true
command: npm start
db:
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
volumes:
- "./mysql:/var/lib/mysql"
- "./.data/conf:/etc/mysql/conf.d"
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_database
MYSQL_USER: root
MYSQL_PASSWORD: root
cache:
image: memcached
ports:
- "11211:11211"
expose:
- "11211"
entrypoint:
- memcached
- -m 64
volumes:
mysql: {}
解决方案
我去过那里,它很容易但不推荐在 PRODUCTION上运行,当您第一次运行 Mysql 容器(在您的情况下为 db)时,它会在 .mysql 上创建一些文件,因为您在卷上定义了这些文件:
volumes:
- "./mysql:/var/lib/mysql"
- "./.data/conf:/etc/mysql/conf.d"
因此,当您再次运行它时,文件就在那里,并且假设它已经有信息,docker 会跳过数据库的创建。
因此,要修复它,只需删除您机器上 .mysql 文件夹的内容并重新运行您的容器。
简化该过程的运行
从不(从不)在生产中运行
docker-compose rm -fv;
rm -rf .mysql/*
但请记住不要在生产中运行。
推荐阅读
- r - 如果它们共享至少一个公共项目,则在数据框中合并组
- html - 如何从html向服务器发出get请求
- react-native - 如何添加下载的 fontawesome pro 图标以响应原生?
- python - 将切片与索引混合到 NumPy 中的 mgrid 输入
- flutter - 想防止我的输出飞镖被剪裁
- javascript - 当它在第一页时如何获得分页的活动类?
- javascript - 使用 webdriver io 的 javascript 移动自动化
- python - 使用 python-requests 保存 csv 文件时,有人可以帮助解决 Pandas 错误吗?
- android - 使用 Retrofit 在同一屏幕中调用两个不同的端点
- ios - Git 克隆在 Windows-Flutter、iOS 上失败