Die Docker-Test-DB wird nicht gestartet

Überblick

Aus irgendeinem Grund war ich süchtig nach dem Phänomen, dass die Docker-Test-DB in Exit 1 endete, also machte ich mir eine Notiz.

src $ docker-compose ps
         Name                     Command           State            Ports
-----------------------------------------------------------------------------------
db                        docker-entrypoint.sh      Up       0.0.0.0:3307->3306/tcp
                          mysqld                             , 33060/tcp
db-testing                docker-entrypoint.sh      Exit 1
                          mysqld
docker-laravel_app_1      docker-php-entrypoint     Up       0.0.0.0:18000->8000/tc
                          php-fpm                            p, 9000/tcp
docker-laravel_https-     /init                     Exit 0
portal_1
docker-laravel_web_1      nginx -g daemon off;      Up       0.0.0.0:10080->80/tcp

Umgebung

MacBook Air 2019 (core-i5, RAM16GB) Laravel7 Docker for Desktop 2.3.0.4 Docker version 19.03.12 Docker-compose version 1.26.2

Anwendbare Docker-compose.yml

docker-compose.yml


version: "3"
services:

  db:
    build:
      context: ./docker/mysql
    container_name: db
    volumes:
      - db-store:/var/lib/mysql
      - db-logs-store:/var/log/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      - MYSQL_DATABASE=${DB_NAME:-JETmysql}
      - MYSQL_USER=${DB_USERNAME:-root}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
      - TZ=${TZ:-Asia/Tokyo}
    ports:
      - ${DB_PORT}:3306

  db-testing:
    image: mysql:8.0
    container_name: db-testing
    volumes:
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    tmpfs:
      - /var/lib/mysql
      - /var/log/mysql
    environment:
      - MYSQL_DATABASE=${DB_NAME:-JETmysql}
      - MYSQL_USER=${DB_USERNAME:-root}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
      - TZ=${TZ:-Asia/Tokyo}
    ports:
      - ${DB_TESTING_PORT}:3306
 
volumes:
  db-logs-store:
  db-store:
  redis-store:

Auf den ersten Blick schien es in Ordnung zu sein, aber damit konnte das Protokoll nicht geschrieben werden und es trat ein Berechtigungsfehler auf.

src $ docker logs db-testing
2020-09-05 16:31:21+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.
2020-09-05 16:31:22+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-09-05 16:31:22+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.21-1debian10 started.
2020-09-05 16:31:22+09:00 [Note] [Entrypoint]: Initializing database files
2020-09-05T16:31:22.412681+09:00 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.21) initializing of server in progress as process 43
2020-09-05T16:31:22.420005+09:00 0 [ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/mysql-error.log' for error logging: No such file or directory
2020-09-05T16:31:22.420889+09:00 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-09-05T16:31:22.421233+09:00 0 [ERROR] [MY-010119] [Server] Aborting
2020-09-05T16:31:22.421572+09:00 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21)  MySQL Community Server - GPL.

Um dies zu vermeiden, schreiben Sie die Berechtigungs-Cmd in die Docker-Datei.

FROM mysql:8.0
RUN mkdir /var/log/mysql
RUN chown mysql:mysql /var/log/mysql

Kommentieren Sie das Bild aus und laden Sie die Docker-Datei.

docker-compose.yml


db-testing:
    # image: mysql:8.0
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile.test

Ich dachte, dies würde das Problem beheben, aber es trat ein weiterer Fehler auf.

2020-09-05 16:37:43+09:00 [Note] [Entrypoint]: Temporary server started.
Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2020-09-05 16:37:53+09:00 [Note] [Entrypoint]: Creating database JETmysql
2020-09-05 16:37:53+09:00 [Note] [Entrypoint]: Creating user root
ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'

Sie können keinen USER erstellen, weil die Zeitzone falsch ist? ?? Ich dachte, aber ich habe es verpasst.

Gelöst durch Nichtangabe von USERNAME und tmpfs log

docker-compose.yml


db-testing:
    # image: mysql:8.0
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile.test
    container_name: db-testing
    volumes:
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    tmpfs:
      - /var/lib/mysql
      # - /var/log/mysql
    environment:
      - MYSQL_DATABASE=${DB_NAME:-JETmysql}
      # - MYSQL_USER=${DB_USERNAME:-root}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
      - TZ=${TZ:-Asia/Tokyo}
    ports:
      - ${DB_TESTING_PORT}:3306

Warnung wird weiterhin ausgegeben. .. Es begann vorerst.

Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
2020-09-05 16:45:50+09:00 [Note] [Entrypoint]: Creating database JETmysql

2020-09-05 16:45:50+09:00 [Note] [Entrypoint]: Stopping temporary server
2020-09-05 16:45:53+09:00 [Note] [Entrypoint]: Temporary server stopped

2020-09-05 16:45:53+09:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.

Im Folgenden, weil Sie den Root-Benutzer bereits irgendwo angegeben haben Wenn Sie es erneut angeben, tritt ein Fehler auf. Es ist wahr, dass db es spezifiziert, aber ich verstehe den Grund nicht, weil die Container sich nicht gegenseitig stören sollten. .. https://github.com/docker-library/mysql/issues/129#issuecomment-178265632

Wenn jemand weiß, lassen Sie es mich bitte wissen.

Recommended Posts

Die Docker-Test-DB wird nicht gestartet
Der MySQL-Container startet nicht in Docker
Terminal startet nicht
Localhost3000 wird in der Docker / Rails-Entwicklung nicht gestartet.
Docker Compose startet nicht mit der Fehleranzeige docker.credentials.errors.InitializationError
Container startet nicht mit Docker-Compose
Spring Boot 2.0.0 startet den integrierten Tomcat nicht
[NetBeans] Story, wenn sie nicht gestartet wird
[Docker] Stellt keine Verbindung zur MySQL Workbench her ... Einstellungen für die DB-Container-Portweiterleitung
Docker + Spring-Boot-Start
Eclipse wird nach der Installation von Java 11 nicht gestartet
Wenn Docker für Mac 2.4.0.0 keine Dateiänderungen widerspiegelt
Docker für Windows: Der MySQL-Container wird bei der Migration von Hyper-v auf WSL2 nicht gestartet
Was zu überprüfen ist, wenn Schienen db: Migration nicht bestanden
So erhalten Sie das Protokoll, wenn install4j nicht gestartet wird
Schienen testen db nur fallen
Bei der Bundle-Installation wird mysql2 nicht installiert
So lösen Sie das Problem, dass Aptana Studio nicht gestartet wird
Was ich getan habe, als die DB nicht mit Docker-Compose gestartet wurde
WSL2 + Docker Desktop für Windows startet nicht nur den MySQL-Container