2017-02-08 11 views
1

ubuntuイメージでmysqlを実行するドッカーファイルを作成しました。私が実行した場合Dockerコンテナは、ボリュームが接続されている場合にのみ実行を停止します。

FROM ubuntu 
RUN apt-get update 
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server 
RUN sed -i '43s/.*/bind-address   = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf 
EXPOSE 3306 
ENTRYPOINT service mysql start && bash 

:Dockerfileです

docker run -dit mysql-server 

コンテナのすべてを構築した後は正常に動作し、私のApache/PHPコンテナがそれと通信することができます。しかし、ボリュームを添付して(docker run -dit -v ~/vol/:/var/lib/mysql/ mysql-server)それを実行すると、コンテナは30秒後に実行を停止します(これは毎回同じ時間です)。

誰もがコンテナを保持してボリュームをマウントする方法を知っていますか?私はこれまでにこの問題を抱えていたことがなく、オンラインで他のものを見つけることはできません(私はしばらく見てきました)。ありがとう。

+1

何に役立ちますか? – Rickkwa

+0

〜/ volとその場所にある画像の中には何が違うのですか?ファイルのパーミッションとUID/GIDの所有権をチェックすることを忘れないでください。 – BMitch

+0

ENTRYPOINT '&& bash'を' && sleep infinity'で置き換えることができますか? – user2915097

答えて

0

これは/var/lib/mysqlの内容をマスクしており、内容が空であると思われる~/volの内容であるためです。そのため、MySQLサーバはデータベースファイルがないため起動できません。 here is the link to Dockerhubがあなたの探しているものを処理するので、私は個人的にあなたのカスタム実装上の公式イメージを使用します。これらの変更が必要な場合は、カスタムmy.cnfファイルをマウントするオプションがあります。ただし、デフォルトではイメージは0.0.0.0にバインドされます。設定オプションについては、Dockerhubリンクを参照してください。

希望は、これは `ドッキングウィンドウのlogs`から

ディラン

+0

ありがとうございます。ええ、私は今公式のイメージを使用しており、それは素晴らしい作品です。ボリュームを追加するとクラッシュする理由を理解したかっただけです。 '〜/ var'(別のボリュームを介して別のコンテナからコピーされたもの)のすべての正しいデータであっても、私のコンテナはクラッシュし続けます。私はおそらく、これといくつかの権限を変更する組み合わせがうまくいくと思いますか?私の現在のこの問題に対する解決策は、ボリュームを別の場所にマウントし、すべてをコピーするためのcronジョブを実行することです(かなり醜いです)。私は間違いなく、Dockerコンテナがどのように動作するかをより強固に理解していると思います。ありがとう! –

+0

あなたの問題を解決するのを助けてくれたことをうれしく思います。あなた自身のDockerイメージを転がすのではなく、一般的なルールとして公式のものをベースにして、本当にうまくいくのでカスタマイズを行います。 Dockerのパーミッションは痛いことがあります。あなたの権限を明示的に定義し、それを除外するためのコピーの後に、 'chown -R root:root

'をお勧めします。ファイルのUIDが0(つまりroot)である限り、アクセス権に関連する問題は避けてください。なぜこのコピーが必要なのか尋ねてもいいですか?また、これが解決した場合は、解決済みとマークしてください:) –

関連する問題