Als ich versuchte, einen Docker-Container zu starten, auf dem MySQL mit Docker-Compose ausgeführt wird, wurde der Container wiederholt für immer neu gestartet. Notieren Sie sich hier die Lösung für dieses Problem.
Übrigens hatte ich dieses Problem bei der Verwendung von Docker Toolbox unter Windows, aber es scheint (wahrscheinlich) in anderen Umgebungen unwahrscheinlich.
Die Einstellungen des Teils von docker-compose.yml, in dem dieses Problem auftritt, sind wie folgt.
db:
image: mysql:5.7
volumes:
- "/tmp/db/data:/var/lib/mysql"
- "./db:/usr/src/db"
restart: always
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
ports:
- 3306:3306
Es werden keine speziellen Einstellungen vorgenommen, nur die minimal erforderlichen Einstellungen basierend auf dem Image von mysql: 5.7
.
Führen Sie "--innodb-use-native-aio = 0" im gestarteten Container aus. Docker-compose.yml sieht also so aus:
db:
image: mysql:5.7
volumes:
- "/tmp/db/data:/var/lib/mysql"
- "./db:/usr/src/db"
restart: always
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
ports:
- 3306:3306
command: --innodb-use-native-aio=0 # <-Dies!
Das offizielle MySQL-Dokument enthält die folgende Beschreibung.
InnoDB uses the asynchronous I/O subsystem (native AIO) on Linux to perform read-ahead and write requests for data file pages. This behavior is controlled by the innodb_use_native_aio configuration option, which applies to Linux systems only and is enabled by default.
InnoDB (Datenbankmodul für MySQL) verwendet standardmäßig asynchrone Linux-E / A (native AIO). Dieses Verhalten kann jedoch mit der Option innodb_use_native_aio
geändert werden.
Dieses Mal habe ich den Container unter Windows mit Docker Toolbox ausgeführt, aber in diesem Fall ist diese asynchrone E / A nicht verfügbar. Es scheint also, dass ein Fehler aufgetreten ist und der Neustart wiederholt wurde. Daher sollte, wie in dem oben in der offiziellen Dokumentation zitierten Teil angegeben, die Option "innodb_use_native_aio" so eingestellt werden, dass keine asynchrone E / A verwendet wird, um dieses Problem zu vermeiden.
Der Container wird neu gestartet, weil ich in docker-compose.yml "restart: always" geschrieben habe. Andernfalls fällt der Behälter normal.