Docker-Ordner kann mit Docker-Compose nicht in den Host eingebunden werden


7

Hier habe ich einen Docker-Container erstellt, der das mariadbImage verwendet, und drei Volumes wie folgt erstellt.

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

Die ersten beiden Volumes funktionieren erfolgreich, aber ich kann keine Mariadb-Protokolldateien im logsOrdner finden. Der logsOrdner wird sowohl auf dem Host als auch auf dem Container (/ var / log / mysql) leer angezeigt. Ich denke, Host-Ordner überschreiben in Docker-Dateisystem.

Wenn ich dieses Volume ( ./logs:/var/log/mysql) aus Docker-Compose entferne , werden Protokolldateien auf dem Container angezeigt.

Mein Plan ist es, /var/log/mysql/Ordner auf lokalen Computer zu mounten .

Vielen Dank !


Probieren Sie chmod 777 /var/log/mysqlIhren Host aus. Ich wette, Ihr Daemon wird ausgeführt, da der mysqlBenutzer keine Rechte hat, in dieses Verzeichnis auf Ihrem Host zu schreiben. Danach müssen Sie die MySQL-Benutzer-ID im Container finden, um chownzu vermeiden, dass jeder Ihre Datenbankprotokolle liest und schreibt.
Tensibai

Vielleicht ist Selinux oder Apparmor aktiviert
030

Ich benutze DebianOS und Apparmor bereits deaktiviert.
Nullpointer

Antworten:



3

Wenn Sie eine RedHat-basierte Distribution ausführen, z. B. Fedora oder CentOS, ist SELinux möglicherweise standardmäßig aktiviert. Sie können Ihren Containern automatisch erlauben, auf Dateien auf den Hosts zuzugreifen, indem Sie die folgende :ZOption bereitstellen:

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

1

Wenn /var/log/mysql:/var/log/mysqles sich um ein Volume handelt, wird der Inhalt des Containers /var/log/mysql/im /var/log/mysql/Ordner auf dem Host gespeichert .

Es ist möglich, dass es nicht möglich ist, die zu montieren, /var/lib/mysqlda SElinux oder App-Rüstung dies verhindert.

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

Beachten Sie, dass Benutzer auf Hostsystemen mit aktiviertem SELinux möglicherweise Probleme damit haben. Die aktuelle Problemumgehung besteht darin, dem neuen Datenverzeichnis den entsprechenden SELinux-Richtlinientyp zuzuweisen, damit der Container darauf zugreifen kann:

$ chcon -Rt svirt_sandbox_file_t /my/own/datadir

Ja, ich stimme zu, das ./databaseVolume funktioniert einwandfrei und selbst wenn ich eine Datei im ./logsOrdner auf dem Host erstelle , wird sie auf dem Container angezeigt, aber das Volume funktioniert nicht in umgekehrter Reihenfolge.
Nullpointer

Wenn zum Beispiel der MySQL-Container von Dockerhub ausgeführt und die Datenbank in / var / lib / MySQL gespeichert wird, wird der Container neu gestartet, und die Datenbank, die sich auf dem Host befindet, befindet sich ebenfalls im Container
030
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.