[英]Correctly using mysql commands in docker-compose?
我正在尝试学习 docker-compose。 我在通过 docker compose 运行 mysql 命令时遇到问题。
这是我的 docker-compose 文件:
version: '3'
services:
mysql:
image: mysql
container_name: mysql
restart: always
env_file: .env
environment:
- MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASS
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASS
- MYSQL_DB=$MYSQL_DB
volumes:
- db-data:/var/lib/mysql
command: >
mysql -e "CREATE DATABASE \${MYSQL_DB}"
&& mysql -e "GRANT ALL PRIVILEGES ON \${MYSQL_DB}.* TO '\${MYSQL_USER}'@'%'"
&& mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
ports:
- $MYSQL_PORT:3306
volumes:
db-data:
但是当我运行docker-compose up --force-recreate --build
,我得到了 mysql 使用指南输出:
Attaching to mysql
mysql | mysql Ver 8.0.25 for Linux on x86_64 (MySQL Community Server - GPL)
mysql | Copyright (c) 2000, 2021, Oracle and/or its affiliates.
mysql |
mysql | Oracle is a registered trademark of Oracle Corporation and/or its
mysql | affiliates. Other names may be trademarks of their respective
mysql | owners.
mysql |
mysql | Usage: mysql [OPTIONS] [database]
mysql | -?, --help Display this help and exit.
mysql | -I, --help Synonym for -?
mysql | --auto-rehash Enable automatic rehashing. One doesn't need to use
mysql | 'rehash' to get table and field completion, but startup
...etc...
我是否使用command:
正确发送 mysql 命令?
我想建议一种不同的 MySQL 方法:
您可以挂载另一个将在开头运行的 SQL 脚本文件:
version: '3'
services:
mysql:
image: mysql
container_name: mysql
restart: always
env_file: .env
environment:
- MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASS
- MYSQL_USER=$MYSQL_USER
- MYSQL_PASSWORD=$MYSQL_PASS
- MYSQL_DB=$MYSQL_DB
volumes:
- db-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- $MYSQL_PORT:3306
volumes:
db-data:
现在在您docker-compose.yml
目录中创建init.sql
:
CREATE DATABASE ${MYSQL_DB}
GRANT ALL PRIVILEGES ON ...
您可以在Initializing a fresh instance 中看到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.