[英]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"]
此chmod命令旨在避免此類錯誤
#!bin/bash
chmod 664 /etc/mysql/conf.d/custom.cnf
exec "$@"
[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.