Docker的Mysql容器根密码
今天我试图让我的Docker环境工作!
在这个问题上,我遇到了一个相当的问题:我的MySQL容器,扩展了MySQL官方Docker镜像,似乎无法创buildroot帐户,尽pipe在我docker-compose`.yml
设置了MYSQL_ROOT_PASSWORD
环境variables。
我在这里复制我的Docker文件:
泊坞窗,compose.yml
大部分的环境variables都在脚本和应用程序中独立于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的/configuration/ 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权限,阻止我创build数据库或mysql用户为我的应用程序!
谢谢你的build议:D!
编辑 :经过几天的调查,并在docker-library/mysql
存储库中的问题,我们发现其中一个问题是custom.cnf中不推荐使用的configuration项。
key_buffer => key_buffer_size
现在容器运行几秒钟后,build立,然后崩溃。
日志中的主要线索是这样的:
Version: '5.7.15' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server (GPL)
我已经尝试了一个build议的解决scheme来手动configurationcustom.cnf中的端口,但它不起作用。 容器试图连接到MySQL并由于端口而崩溃。
问题不是很明显,因为第二次启动容器时,跳过了初始化,configuration了良好的端口,服务器正常工作。
事情是由于崩溃,初始化的结束没有执行,包括我的脚本和数据库创build用户。
所以我想知道为什么这个该死的mysqld在我第一次启动容器后在端口0上侦听。
如果你有线索,我会很高兴在这里!
尝试颠倒你的切入点:
ENTRYPOINT ["/my-entrypoint.sh", "/entrypoint.sh"]
内置的入口点是寻找“mysqld”作为第一个参数,而不是“my-entrypoint.sh”。 所以你想打电话给你,然后用传递的选项启动默认入口点。
最后我明白了,感谢这个问题上的人: https : //github.com/docker-library/mysql/issues/82
罪魁祸首是MYSQL_HOST
环境variables,导致mysqld --initialize-insecure
命令失败。
解决方法是用localhost
replace127.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!