Il s'agit de la procédure de modification du fuseau horaire dans Docker of Oracle Database.
L'article suivant a été très utile pour la procédure d'installation de Docker dans Oracle Database. Utilisation d'Oracle Database avec Docker
Pour la procédure détaillée, veuillez vous référer au référentiel officiel. https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md
Tout ce que vous avez à faire est de définir la variable d'environnement TZ dans docker-compose.yaml.
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/Tokyo ★★★ Ce ★★★
(*) Ci-dessous, je laisserai un mémorandum du processus d'enquête. Il est complètement aux pieds de serpent, alors veuillez ne voir que ceux qui sont intéressés.
En utilisant Oracle Database Docker, j'ai remarqué que le résultat de l'exécution de la fonction SYSDATE
était UTC.
Lorsque je me suis connecté au conteneur avec docker exec et que j'ai appuyé sur la commande de date, c'était, comme prévu, UTC.
$ date
Sat Feb 1 15:07:28 UTC 2020
Pour changer le fuseau horaire du serveur Linux, vous pouvez utiliser timedatectl (série RHEL7 / série CentOS7) ou copier le fichier de réglage du fuseau horaire (/ usr / share / zoneinfo).
Lorsque j'ai vérifié les informations du système d'exploitation, c'était RHEL 7.7.
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)
Lorsque j'essaye de frapper timedatectl dans le conteneur, j'obtiens une erreur.
$ timedatectl
Failed to create bus connection: No such file or directory
Après enquête, j'ai trouvé des informations selon lesquelles cela peut être causé par l'autorisation d'exécution du conteneur, et cela peut être résolu en définissant le mode privilégié (privilégié) ou en modifiant le paramètre de capacité. , Impossible de résoudre. (*) Si quelqu'un connaît les informations, il serait utile que vous puissiez me le faire savoir.
Par conséquent, j'ai décidé de le gérer en copiant le fichier de réglage du fuseau horaire.
#Vous pouvez également définir un lien symbolique
# 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
Connectez-vous au conteneur en tant qu'utilisateur root car il était en colère en raison d'un manque d'autorisations.
PS > docker exec -it --user root {Nom du conteneur} /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
Une erreur peu claire s'est produite. .. .. Lorsque j'ai cherché sur Google, j'ai trouvé un article qui correspond à un phénomène similaire.
D'après l'article, vous devriez utiliser l'option --workdir
pour écraser le paramètre WORKDIR
dans le Dockerfile [^ 1], donc je vais essayer.
PS > docker exec -it --user root --workdir / {Nom du conteneur} /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
Ça s'est bien passé. Cependant, dans ce cas, il est plus facile de changer la variable d'environnement TZ, donc je pense qu'il vaut mieux pratiquer cela.
[^ 1]: Il semble que cela soit dû au fait que WORKDIR / home / oracle
est spécifié dans le Dockerfile qui est la source de l'image. (https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/Dockerfile#L105)
Recommended Posts