@dekin の調査に基づいて、この問題を解決するためにこれを行いました:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
ビルドして実行:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
@Robertの回答に基づいて、私はこの Dockerfile
になりました :
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
CMD
オーバーライドが機能しませんでした。コンテナーが奇妙なエラーで停止しました:
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
元の CMD
だと思います コマンドは(@Robertの回答で)不足しているより多くのことを行っていたので、別のアプローチでそれを行いました.latest
では試しませんでした. バージョンですが、動作するはずです。
docker-compose
を使用している場合 、カスタム イメージをビルドする必要はありません。フラグ --datadir=/var/lib/mysql-no-volume
を追加するだけです mysql
をプルするときのコマンドに
例:
version: '2.4'
services:
mysql:
image: mysql:5.7
command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"
公式の mysql イメージは、データをボリュームに格納します。通常、これはコンテナーの寿命を超えてデータを保持できるようにするために必要ですが、データ ボリュームはユニオン ファイル システムをバイパスし、イメージにコミットされません。
ボリュームのない独自の mysql ベース イメージを作成することで、やろうとしていることを達成できます。その後、データを追加してイメージにコミットできますが、コミット後に実行中のコンテナーに追加されたデータは、コンテナーがなくなると失われます。
コマンドラインからファイルを開くときにvimにシンボリックリンクをたどらせる
Redis - Linux / Linux に Redis をインストールする際のエラー:`cc:コマンドが見つかりません`