docker-composeを使用してdockerフォルダーをホストにマウントできません


7

ここでは、mariadbイメージを使用するDockerコンテナーを作成し、以下のように3つのボリュームを作成しました。

docker-compose.yml

version: '2.0'

services:
  mariadb:
  image: mariadb:latest
  restart: always
  container_name: mariadb
  environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=testdb
  ports:
   - 3307:3306
  volumes:
   - ./database:/var/lib/mysql
   - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:ro
   - ./logs:/var/log/mysql

最初の2つのボリュームは正常に機能しますが、mariadb-logsファイルをlogsフォルダーに見つけることができません。logsホストとコンテナー(/ var / log / mysql)でフォルダーが空白で表示されるようです。ホストフォルダーがDockerファイルシステムにオーバーライドされると思います。

./logs:/var/log/mysqldocker-composeからこのボリューム()を削除すると、コンテナーにログファイルが表示されます。

私の計画は、/var/log/mysql/ローカルマシンにフォルダーをマウントすることです。

よろしくお願いします!


chmod 777 /var/log/mysqlあなたのホストで試してみてください、あなたのホストのmysqlこのディレクトリに書き込む権限がユーザーにはないので、デーモンが実行されているに違いありません。その後、コンテナ内のmysqlユーザーIDを見つけて、chown誰もがデータベースログを読み書きしないようにする必要があります。
Tensibai

おそらく、selinuxまたはapparmorがアクティブ化されます
030

私はDebianosを使用していますが、apparmorはすでに非アクティブ化されています。
Nullpointer 2017

回答:


5

CentOS 7を使用している場合(私のように)。デフォルトでSELinuxが有効になっている可能性があります。https ://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/を確認するか、次のようにマウントします

  volumes:
   - ./database:/var/lib/mysql:Z
   - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z
   - ./logs:/var/log/mysql:Z

3

FedoraやCentOSなどのRedHatベースのディストリビューションを実行している場合、デフォルトでSELinuxが有効になっている可能性があります。次の:Zように、オプションでマウントすることにより、コンテナがホスト上のファイルにアクセスすることを自動的に許可できます。

  volumes:
   - ./database:/var/lib/mysql:Z
   - ./_conf/mariadb.cnf:/etc/mysql/my.cnf:Z
   - ./logs:/var/log/mysql:Z

1

/var/log/mysql:/var/log/mysqlがボリュームとして定義されている場合、コンテナのコンテンツはホストのフォルダに/var/log/mysql/保存され/var/log/mysql/ます。

/var/lib/mysqlSElinuxまたはアプリのアーマーがこれを妨げているため、をマウントできない可能性があります。

https://hub.docker.com/_/mysql/

SELinuxが有効になっているホストシステムのユーザーには、この問題が発生する可能性があります。現在の回避策は、関連するSELinuxポリシータイプを新しいデータディレクトリに割り当てて、コンテナがアクセスできるようにすることです。

$ chcon -Rt svirt_sandbox_file_t /my/own/datadir

はい、同意します。./databaseボリュームは正常に機能し./logs、ホスト上のフォルダーにファイルを作成しても、コンテナーには表示されますが、ボリュームは逆順で機能しません。
Nullpointer 2017

たとえば、dockerhubからのmysqlコンテナーが実行され、データベースが/ var / lib / mysqlに保存されている場合、コンテナーは再起動され、ホストに存在するデータベースもコンテナー内で見つかります
030
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.