Hier habe ich einen Docker-Container erstellt, der das mariadb
Image 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 logs
Ordner finden. Der logs
Ordner 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 !
docker
docker-compose
Null Zeiger
quelle
quelle
chmod 777 /var/log/mysql
Ihren Host aus. Ich wette, Ihr Daemon wird ausgeführt, da dermysql
Benutzer keine Rechte hat, in dieses Verzeichnis auf Ihrem Host zu schreiben. Danach müssen Sie die MySQL-Benutzer-ID im Container finden, umchown
zu vermeiden, dass jeder Ihre Datenbankprotokolle liest und schreibt.Debian
OS und Apparmor bereits deaktiviert.Antworten:
Wenn Sie CentOS 7 verwenden (wie ich). Möglicherweise ist SELinux standardmäßig aktiviert. Überprüfen Sie https://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/ oder mounten Sie wie folgt :
quelle
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
:Z
Option bereitstellen:quelle
Wenn
/var/log/mysql:/var/log/mysql
es 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/mysql
da SElinux oder App-Rüstung dies verhindert.https://hub.docker.com/_/mysql/
quelle
./database
Volume funktioniert einwandfrei und selbst wenn ich eine Datei im./logs
Ordner auf dem Host erstelle , wird sie auf dem Container angezeigt, aber das Volume funktioniert nicht in umgekehrter Reihenfolge.