簡體   English   中英

在 docker 中為 alpine linux 安裝 Mysql

[英]Mysql installation for alpine linux in docker

我在 docker 的 alpine 上安裝 mysql 仍然有問題。

我還需要 openjdk:8u201-jdk-alpine3.9。

我的碼頭檔案:

FROM openjdk:8u201-jdk-alpine3.9
RUN apk update && \
    apk add mysql mysql-client && \
    rm -f /var/cache/apk/* && \
    addgroup mysql mysql && \
    mkdir run/mysqld && \
    touch /var/run/mysqld/mysqld.sock && \
    touch /var/run/mysqld/mysqld.pid && \
    chown -R mysql:mysql /var/run/mysqld/mysqld.sock && \
    chown -R mysql:mysql /var/run/mysqld/mysqld.pid && \
    chmod -R 644 /var/run/mysqld/mysqld.sock && \
    apk add openrc --no-cache

但是,在容器中: - 沒有 mysql 服務(只有 mariadb,但這可能是 alpine 的標准情況) - /etc/mysql 目錄中沒有任何 my.cnf 文件

當我嘗試mysql命令時,出現錯誤:

Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (111)

當我嘗試mysql -h 127.0.0.1 -P 3306 -u root命令時,出現錯誤:

Can't connect to MySQL server on '127.0.0.1' (115)

本地主機也是如此。

首先 - 為什么要在該特定圖像上安裝 mysql-server ? 我建議使用 2 個單獨的容器 - 一個用於 mysql 數據庫,另一個用於您使用 openjdk 映像開發的應用程序。

您可以簡單地使用此要點https://gist.github.com/karlisabele/d0bebe3d27fc44a57d1db9a9abdff45a來創建一個設置,您的 Java 應用程序可以使用database (服務名稱)作為 mysql 服務器的主機名連接到 mysql 數據庫。

有關 mysql 映像的其他配置,請參閱https://hub.docker.com/_/mysql (您應該定義 MYSQL 用戶、密碼、數據庫名稱等...)


更新

我更新了要點並添加了 mysql 工作所需的環境變量...用您自己的值替換 qwerty 值,您應該能夠使用數據庫中提供的用戶名和密碼通過 database:3306 從 Java 應用程序訪問數據庫環境變量

文件末尾的卷定義告訴 docker 守護進程我們想在主機文件系統的某處創建一個持久卷並使用mysql作為別名。 因此,當我們定義數據庫服務卷時,我們可以簡單地使用 mysql:/var/lib/mysql,它實際上會掛載 docker 在您的文件系統上創建的一個不起眼的文件夾。 這將允許 mysql 數據庫在您每次啟動服務時具有持​​久狀態(因為它會從您的主機掛載數據)並且您不必擔心卷的實際位置

您可以通過運行docker volumes ls查看所有卷

  1. vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]

#skip-networking
  1. 重啟mysql容器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM