Mac Docker下创建 MySQL 8.0 容器

 

MacOS下下载安装Docker,并pull mysql image我在很早之前做过了。不赘述了,很简单。

以下步骤简单记录我重新创建MySQL容器的命令,供日后参考。

启动Docker后,打开terminal,先查看现有images: docker images,我发现我有两个mysql镜像,于是删掉一个: docker rmi imageID

(base) Sophie-mbp:~ Sophie$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              dcf9ec9265e0        5 months ago        98.2MB
mysql               5.7                 1e4405fe1ea9        5 months ago        437MB
mysql               latest              d435eee2caa5        5 months ago        456MB
hello-world         latest              fce289e99eb9        15 months ago       1.84kB
(base) Sophie-mbp:~ Sophie$ docker rmi 1e4405fe1ea9

然后在Host机器目录(也就是我的电脑本尊)创建三个文件夹,分别用于存放mysql容器的data/config/log,并在docker里面配置进去:Preferences --> Resources --> FILE SHARING,然后Apply&Restart。

接下来创建并启动MySQL容器,把刚刚这三个目录mount到这个容器。

-p 3306:3306意思是将host机器的3306端口映射到docker container的3306端口

--name是配置容器名为MySQL

-v就是将host目录跟container目录映射起来,这样将来container没了,数据,配置,Log都还在

-e配置容器root密码

-d配置该容器来自哪个镜像

docker run -p 3306:3306 --name MySQL -v /Users/Sophie/Applications/docker/conf:/etc/mysql -v /Users/Sophie/Applications/docker/log:/var/log/mysql -v /Users/Sophie/Applications/docker/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wobugaosunihahaha -d mysql:latest

然而不幸的是,我这个容器起起来就exit了...docker ps -a能看到过去所有的没有被删除的容器

然后用docker logs 容器ID查看日志(容器ID只用给出开头一部分字符,且能在所有容器ID里面确定唯一目标容器的开头部分字符即可)。由于我只有一个容器,所以我给出一个c就能唯一确定我想要查看的容器日志。

(base) Sophie-mbp:docker Sophie$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
cd8943abd16b        mysql:latest        "docker-entrypoint.s…"   12 hours ago        Exited (1) 12 hours ago                       MySQL
(base) Sophie-mbp:docker Sophie$ docker logs c
2020-04-24 03:22:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-04-24 03:22:00+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-04-24 03:22:00+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-04-24 03:22:00+00:00 [Note] [Entrypoint]: Initializing database files
2020-04-24T03:22:00.887123Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.18) initializing of server in progress as process 45
2020-04-24T03:22:11.425922Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2020-04-24 03:22:20+00:00 [Note] [Entrypoint]: Database files initialized
2020-04-24 03:22:20+00:00 [Note] [Entrypoint]: Starting temporary server
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
2020-04-24T03:22:20.621512Z 0 [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files
2020-04-24 03:22:20+00:00 [ERROR] [Entrypoint]: Unable to start server.

在日志里可以明确看出,问题出在 mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)

就是说,我少挂载了一个目录,容器的/var/lib/mysql-files目录需要跟host的某个路径映射起来。

那么,删掉这个起不来的容器,重新来过吧,docker rm c (如果现有容器比较多的话,容器ID给长一点,由于我的目前只有一个

容器,那么只用给出一个开头字母就好了)

(base) Sophie-mbp:docker Sophie$ docker rm c
c
(base) Sophie-mbp:docker Sophie$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
(base) Sophie-mbp:docker Sophie$ 

很不幸,还是没有起来,docker ps里没有运行状态的容器,docker ps -a能看到我可怜的容器起来5秒就exit了。继续查看Log 

(base) Sophie-mbp:docker Sophie$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
234d8e52707b        mysql:latest        "docker-entrypoint.s…"   25 seconds ago      Exited (1) 20 seconds ago                       MySQL
(base) Sophie-mbp:docker Sophie$ docker logs 2
2020-04-24 15:07:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-04-24 15:07:23+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-04-24 15:07:23+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-04-24T15:07:24.154280Z 0 [Warning] [MY-010101] [Server] Insecure configuration for --secure-file-priv: Location is accessible to all OS users. Consider choosing a different directory.
2020-04-24T15:07:24.154360Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.18) starting as process 1
2020-04-24T15:07:24.162732Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2020-04-24T15:07:25.113266Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('2') and data dictionary ('0').
2020-04-24T15:07:25.113716Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2020-04-24T15:07:25.113940Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-04-24T15:07:25.743324Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.18)  MySQL Community Server - GPL.

 

 

https://docs.docker.com/compose/compose-file

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章