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.

好吧,大概意思就是說,我的host目錄是大小寫不敏感的,但是這個image是大小寫敏感的...谷歌了一圈,並沒有很好的解決方案。淚目,mysql 8.0和mac docker竟然還有這樣的衝突...如果我不掛載host目錄的話,其實就不會出這個問題,不過我着實是想保存數據的。遂,刪掉8.0(也就是latest)鏡像,重新pull 5.7的

(base) Sophie-mbp:docker Sophie$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              dcf9ec9265e0        5 months ago        98.2MB
mysql               latest              d435eee2caa5        5 months ago        456MB
hello-world         latest              fce289e99eb9        16 months ago       1.84kB
(base) Sophie-mbp:docker Sophie$ docker rmi mysql
Untagged: mysql:latest
Untagged: mysql@sha256:c93ba1bafd65888947f5cd8bd45deb7b996885ec2a16c574c530c389335e9169
Deleted: sha256:d435eee2caa52800a0b534b130fd8f8a94f772f9ed08d0da1053fa3a1b7daad2
Deleted: sha256:ae21db0dd817f30c04d5e9e0a70cfbfca2045f669df974330c783f841bc2740a
Deleted: sha256:2f70a51b7bbcad0a31ada04cf0ce10a5d641e07146310cc63291aaff9dd31ba8
Deleted: sha256:8fda2f97f253feba8c792344ad6d868e8a39fb2f826d1501f06511cc4ae49375
Deleted: sha256:08b5c195e5fca4357318ac02c02f3795b3a860957c7a599fdb20b8e55ac23cf4
Deleted: sha256:7d7dacacf6d1f13bd3594c7f9668cf0b41f3cac0cb6073614792a46cbcfceda7
Deleted: sha256:716f31b2e8d6601d02f6b47152ae5014c53c1239bfc46fce1dae97e6c332e94c
Deleted: sha256:b931154d48fa379790de00f12cb8ef69c4a2a0de1503a12de6524b13d4d81e15
Deleted: sha256:23564e7a9d5d1538f334f9a6b05b8c5f140356a83fe818c3a2e60903196263e8
Deleted: sha256:47bd75b99433b84ea120085de92e11cc2a77664be8be33db10542443dbb888e2
Deleted: sha256:4122ef4cce751f9a349611026d962d7eefedea9af10939fe90b1d49670bb72bb
Deleted: sha256:de2a383a7557d4bc8388ec86422dd01be3b1413dc55ee3f5e82342a226274392
Deleted: sha256:99b5261d397c75b1de2c91f0c89f4e6f287248669b72de6cb143e82ea67ad056
(base) Sophie-mbp:docker Sophie$ docker pull mysql:5.7
5.7: Pulling from library/mysql
54fec2fa59d0: Pull complete 
bcc6c6145912: Pull complete 
951c3d959c9d: Pull complete 
05de4d0e206e: Pull complete 
319f0394ef42: Pull complete 
d9185034607b: Pull complete 
013a9c64dadc: Pull complete 
58b7b840ebff: Pull complete 
9b85c0abc43d: Pull complete 
bdf022f63e85: Pull complete 
35f7f707ce83: Pull complete 
Digest: sha256:95b4bc7c1b111906fdb7a39cd990dd99f21c594722735d059769b80312eb57a7
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
(base) Sophie-mbp:docker Sophie$ 

然後把要掛載的hsot目錄清除乾淨(剛剛之前用8.0鏡像的時候生成了一些數據文件在data文件夾下的),重新跑容器,這回成功了,容器起來之後沒有秒退!

接下來,準備把我的網站訪問和使用情況寫到數據庫裏去,然後前端增加一個統計圖表~~ 

(base) Sophie-mbp:etc Sophie$ docker run -p 3306:3306 --privileged=true -v /Users/Sophie/Applications/docker/mysql/log:/logs -v /Users/Sophie/Applications/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
313c525c157c90715dea2960a9c9d5505ca25d62a04f596967d1e8cfa174bed2
(base) Sophie-mbp:etc Sophie$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
313c525c157c        mysql:5.7           "docker-entrypoint.s…"   3 seconds ago       Up 2 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   brave_kapitsa
(base) Sophie-mbp:etc Sophie$ 

docker還可以通過compose.yml配置文件起容器的,另外docker hub是個好網站,裏面有各種image的配置參數說明,鏈接貼在這裏,有問題優先來這裏檢索~~

另外,如果想在mysql裏保存中文的話,得把server的charset配置成utf-8。可以在啓動命令里加上--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci就行了,如下所示:

docker run -p 3306:3306 --privileged=true -v /Users/Sophie/Applications/docker/mysql/log:/logs -v /Users/Sophie/Applications/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

https://hub.docker.com/_/mysql?tab=description

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

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