簡體   English   中英

Docker Mysql容器root密碼[mysqld偵聽端口0]

[英]Docker Mysql container root password [mysqld listens port 0]

今天我正在嘗試讓我的Docker環境正常工作!

在這個問題上我遇到了一個很大的問題:盡管我docker-compose`.yml設置了MYSQL_ROOT_PASSWORD環境變量,我的MySQL容器,擴展MySQL官方Docker鏡像似乎無法創建root帳戶。

我在這里復制我的Docker文件:

泊塢窗,compose.yml

大多數環境變量都在MySQL服務器中獨立使用的腳本和應用程序中使用。 只有MYSQL_ROOT_PASSWORD值得關注(也許這個陳述是導致我無法完成這項工作的原因..!)。

mysql:
    container_name: my_mysql
    build: mysql
    environment:
        - MYSQL_DATABASES=my-database
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_HOST=127.0.0.1
        - MYSQL_PORT=33306
        - MYSQL_USER=user
        - MYSQL_PASSWORD=password
        - MYSQL_MY_DATABASE=my-database
    ports:
        - "33306:3306"
    volumes:
        - "./volumes/mysql:/var/lib/mysql"

MySQL的/ Dockerfile

dos2unix命令用於將Windows行結尾轉換為Unix。

自定義入口點的命名方式不同,以避免覆蓋默認的mysql入口點腳本。

FROM mysql:5.7
MAINTAINER Wonderful Dev <wonderful.dev@wonderful-company.com>

RUN apt-get update && apt-get install -y dos2unix

COPY conf.d/custom.cnf /etc/mysql/conf.d/
COPY docker-entrypoint-initdb.d/databases.sh /docker-entrypoint-initdb.d/databases.sh
COPY my-entrypoint.sh /my-entrypoint.sh

RUN dos2unix /docker-entrypoint-initdb.d/databases.sh && dos2unix /my-entrypoint.sh && dos2unix /etc/mysql/conf.d/custom.cnf && apt-get --purge remove -y dos2unix && rm -rf /var/lib/apt/lists/*

RUN chmod a+x /docker-entrypoint-initdb.d/databases.sh && chown root:root /docker-entrypoint-initdb.d/databases.sh
RUN chmod a+x /my-entrypoint.sh && chown root:root /my-entrypoint.sh

ENTRYPOINT ["/entrypoint.sh", "/my-entrypoint.sh"]

CMD ["mysqld"]

MySQL的/ my-entrypoint.sh

此chmod命令旨在避免此類錯誤

#!bin/bash

chmod 664 /etc/mysql/conf.d/custom.cnf

exec "$@"

MySQL的/配置/ custom.cnf

[mysqld]
default-storage-engine=INNODB
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
bind-address        = 0.0.0.0
skip-external-locking
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
query_cache_limit   = 1M
query_cache_size        = 16M
expire_logs_days    = 10
max_binlog_size         = 100M

[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[isamchk]
key_buffer      = 16M

所有這些東西都在工作,除了我沒有root權限,阻止我為我的應用程序創建數據庫或mysql用戶!

謝謝你的任何建議:D!

編輯 :經過幾天的調查,以及docker-library/mysql存儲庫中的一個問題,我們發現其中一個問題是custom.cnf中已棄用的配置密鑰。

key_buffer => key_buffer_size

現在容器在構建后運行幾秒鍾,然后崩潰。

日志中的主要線索是:

Version: '5.7.15'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server (GPL)

我已經嘗試過一個建議的解決方案來手動配置custom.cnf中的端口,但它不起作用。 容器嘗試連接到MySQL並因端口而崩潰。

這個問題不是很明顯,因為第二次啟動容器時,會跳過初始化,配置好端口,服務器運行正常。

問題在於,由於崩潰,初始化的結束沒有被執行,包括我的腳本和數據庫創建以及用戶。

所以我想知道為什么這個該死的mysqld在第一次在建造后啟動容器時正在偵聽端口0。

如果你有線索,我會很高興在這里談論它!

最后我明白了,感謝這個問題的人: https//github.com/docker-library/mysql/issues/82

罪魁禍首是MYSQL_HOST環境變量,它導致mysqld --initialize-insecure命令失敗。

解決方案是用localhost替換127.0.0.1 ,它生成以下docker-compose.yml

mysql:
    container_name: my_mysql
    build: mysql
    environment:
        - MYSQL_DATABASES=my-database
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_HOST=localhost
        - MYSQL_PORT=33306
        - MYSQL_USER=user
        - MYSQL_PASSWORD=password
        - MYSQL_MY_DATABASE=my-database
    ports:
        - "33306:3306"
    volumes:
        - "./volumes/mysql:/var/lib/mysql"

我希望它會幫助一些人:D!

嘗試撤消您的入口點:

ENTRYPOINT ["/my-entrypoint.sh", "/entrypoint.sh"]

內置入口點正在尋找“mysqld”作為第一個arg,而不是“my-entrypoint.sh”。 因此,您希望調用您的,然后使用傳遞的選項啟動默認入口點。

暫無
暫無

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

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