Dies ist das Verfahren zum Ändern der Zeitzone in Docker of Oracle Database.
Der folgende Artikel war sehr hilfreich für die Installation von Docker in Oracle Database. Verwenden der Oracle-Datenbank mit Docker
Ausführliche Informationen zum Verfahren finden Sie im offiziellen Repository. https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md
Sie müssen lediglich die Umgebungsvariable TZ in docker-compose.yaml festlegen.
version: '2'
services:
db:
image: oracle/database:12.1.0.2-se2
container_name: oracle
ports:
- 1521:1521
- 5500:5500
volumes:
- ./oradata:/opt/oracle/oradata
environment:
- ORACLE_PWD=Oracle01
- ORACLE_PDB=pdb01
- TZ=Asia/Tokio ★★★ Dies ★★★
(*) Im Folgenden werde ich ein Memorandum über den Untersuchungsprozess hinterlassen. Es ist komplett schlangenfüßig, also sehen Sie bitte nur diejenigen, die interessiert sind.
Bei der Verwendung des Oracle Database Docker habe ich festgestellt, dass das Ergebnis der Ausführung der Funktion "SYSDATE" UTC war. Als ich mich mit Docker Exec mit dem Container verband und den Datumsbefehl drückte, war es wie erwartet UTC.
$ date
Sat Feb 1 15:07:28 UTC 2020
Um die Zeitzone des Linux-Servers zu ändern, können Sie timedatectl (RHEL7-Serie / CentOS7-Serie) verwenden oder die Zeitzoneneinstellungsdatei (/ usr / share / zoneinfo) kopieren.
Als ich die Betriebssysteminformationen überprüfte, war es RHEL 7.7.
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)
Wenn ich versuche, timedatectl im Container zu drücken, wird eine Fehlermeldung angezeigt.
$ timedatectl
Failed to create bus connection: No such file or directory
(*) Wenn jemand die Informationen kennt, wäre es hilfreich, wenn Sie mich wissen lassen könnten.
Aus diesem Grund habe ich mich entschlossen, die Zeitzoneneinstellungsdatei zu kopieren.
#Sie können auch einen symbolischen Link festlegen
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
cp: cannot create regular file '/etc/localtime': Permission denied
Ich war wütend wegen fehlender Berechtigungen, deshalb melde ich mich als Root-Benutzer beim Container an.
PS > docker exec -it --user root {Containername} /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "chdir to cwd (\"/home/oracle\") set in config.json failed: permission denied": unknown
Ein unklarer Fehler ist aufgetreten. .. .. Als ich gegoogelt habe, habe ich einen Artikel gefunden, der einem ähnlichen Phänomen entspricht.
Laut Artikel sollten Sie die Option --workdir
verwenden, um die Einstellung WORKDIR
in der Docker-Datei [^ 1] zu überschreiben, also werde ich es versuchen.
PS > docker exec -it --user root --workdir / {Containername} /bin/bash
bash-4.2# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
bash-4.2# date
Sun Feb 2 21:55:24 JST 2020
Es ging gut.
[^ 1]: Es scheint, dass dies durch die Tatsache verursacht wird, dass "WORKDIR / home / oracle" in der Docker-Datei angegeben ist, die die Quelle des Bildes ist. (https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile#L105)
Recommended Posts