今日はDocker環境を機能させようとしています!
この問題で私はかなりの問題に遭遇しました:MYSQL_ROOT_PASSWORD
のdocker-compose`.yml
環境変数の設定にもかかわらず、MySQL公式Dockerイメージを拡張する私のMySQLコンテナーがrootアカウントの作成に失敗するようです。
ここにDockerファイルをコピーします:
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 <[email protected]>
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
ルートアクセス権がないことを除いて、これらすべてが機能しており、アプリのデータベースやmysqlユーザーを作成できません。
アドバイスありがとうございます:D!
[〜#〜] edit [〜#〜]:数日間の調査と、docker-library/mysql
リポジトリの問題の後、次のことがわかりました。問題の1つは、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に接続しようとし、ポートが原因でクラッシュします。
コンテナを2回起動すると、初期化がスキップされ、適切なポートが構成され、サーバーが正常に機能したため、問題はあまり目立ちませんでした。
問題は、クラッシュが原因で、初期化の終了が実行されなかったことです。これには、スクリプトとデータベースの作成、およびユーザーが含まれます。
ですから、ビルド後にコンテナを初めて起動したときに、このいまいましいmysqldがポート0でリッスンしている理由を知りたいと思います。
手がかりがあれば、ここに喜んで教えてくれます!
エントリポイントを逆にしてみてください。
ENTRYPOINT ["/my-entrypoint.sh", "/entrypoint.sh"]
組み込みのエントリポイントは、「my-entrypoint.sh」ではなく、最初の引数として「mysqld」を探しています。したがって、自分のを呼び出してから、渡されたオプションを使用してデフォルトのエントリポイントを起動します。