win10 使用 docker 安装 mysql


参考网址: https://hub.docker.com/_/mysql https://github.com/docker-library/mysql

不挂载本地磁盘(重启后数据会丢失)

docker run -it --rm --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3310:3306 -d mysql

挂载本地磁盘(不随系统自动启动)

docker run -it --rm  -v /h/docker/mysql/data:/var/lib/mysql -v /h/docker/mysql/config/my.cnf:/etc/mysql/my.cnf --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3310:3306 -d mysql

挂载本地磁盘(随系统自动启动)

docker run -it -v /h/docker/mysql/data:/var/lib/mysql -v /h/docker/mysql/config/my.cnf:/etc/mysql/my.cnf --restart=always --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3310:3306 -d mysql

注意:挂载本地磁盘时本地路径需要手动创建;本地配置文件不能为空,需要添加必要的配置信息比如如下配置:

# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysql]

#设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server = utf8

#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 设置不区分大小写
# 必须在安装好MySQL后 修改mySQL配置文件设置为不敏感,一旦启动后,再设置是无效的,而且启动报错;
# 如果已经晚了,那必须把MySQL数据库文件全部 删除,修改配置文件再启动。
lower_case_table_names=1

执行命令时出现以下报错:

C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/host_mnt/h/docker/mysql/config/my.cnf\\\" to rootfs \\\"/var/lib/docker/overlay2/5a11d5f19ed7e2d5ebda3f53c8199162822c9bc4fb0f5be0a593be1386740e3f/merged\\\" at \\\"/var/lib/docker/overlay2/5a11d5f19ed7e2d5ebda3f53c8199162822c9bc4fb0f5be0a593be1386740e3f/merged/etc/mysql/my.cnf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

产生这个错误的原因在于,之前 win 本地文件的路径,使用是 H:/docker 但实际上发现不行,得修改为 /h/docker 这种形式,才可以。