[LINUX] Entrez dans stdin du conteneur Docker en cours d'exécution

Aperçu

Bonjour, c'est haniokasai. Lorsque docker s'attache avec Docker, seul pid 1 peut être utilisé de manière interactive. [^ 1] Ce n'est généralement pas un problème, mais j'ai des problèmes. Dans mon conteneur, Dockerfile appelle un script shell, qui exécute PHP CGI. Dans ce cas, il n'y a aucun moyen de le saisir car le pid de php n'est pas 1. (Vous pouvez voir la sortie avec attach.) Je l'ai donc entré directement dans stdin.

environnement

Hôte vers conteneur stdin

Mise en garde Vous pouvez créer une attache de docker, mais ne la rendez pas interactive. Si c'est le cas, stdin retournera "Fichier texte occupé" et ne tiendra pas. Lors de la fixation, procédez comme suit. (Dans ce cas, l'attachement ne reçoit pas stdin. Vous pouvez choisir entre l'attachement ou l'entrée directe de fichier.)

attach


docker -H DOCKERHOST attacher le nom du conteneur--no-stdin

Tout d'abord, vérifiez le pid de la destination d'entrée standard en haut.

# docker top zzzzzzzz_container
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                25312               25287               0                   16:09               ?                   00:00:00            /bin/sh -c sh /minecraft/resources/run-Main.sh
root                25366               25312               0                   16:10               ?                   00:00:00            sh /minecraft/resources/run-Main.sh
root                25434               25366               0                   16:10               ?                   00:00:00            sh /minecraft/resources/run-BE-BDS.sh
root                25472               25434               13                  16:10               ?                   00:14:22            /minecraft/bin/bedrock_server

Exécuter une entrée standard avec une commande

# echo "help" > /proc/25472/fd/0

Si vous entrez help par défaut dans bedrock_server, l'aide sera renvoyée correctement.

# docker logs zzzzzzzz_container --tail=10
[2019-12-15 08:09:39 INFO] Player disconnected: hanicraft, xuid: 2535460621431466
§2--- Showing help page 1 of 18 (/help <page>) ---
/? [command: CommandName]
/? <page: int>
/alwaysday [lock: Boolean]
/changesetting allow-cheats <value: Boolean>
/changesetting difficulty <value: Difficulty>
/changesetting difficulty <value: int>
/clear [player: target] [itemName: Item] [data: int] [maxCount: int]
§2Tip: Use the <tab> key while typing a command to auto-complete the command or its arguments

Conteneur vers conteneur stdin

Créer un conteneur source

docker create --nom Nom du conteneur--memory=3500mb --network="host" --storage-opt size=2G  --cap-add SYS_PTRACE  -v /proc:/newproc:ro

Le point d'intérêt est

--Ajouter l'autorisation SYS_PTRACE --Monter / proc sur l'hôte en tant que / newproc en lecture seule

Le reste est le même qu'avant.

Dans le container


# echo "help" > /newproc/25472/fd/0

Bibliothèque réalisée avec

Je l'ai fait avec @itsu_dev. Ce sera intéressant car Itsukun gratte le dessus.

Les références

https://serverfault.com/questions/178457/can-i-send-some-text-to-the-stdin-of-an-active-process-running-in-a-screen-sessi https://orebibou.com/2016/04/linux%E3%81%A7%E5%8B%95%E4%BD%9C%E4%B8%AD%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E5%87%BA%E5%8A%9B%E5%86%85%E5%AE%B9%E3%82%92%E3%81%BF%E3%82%8B/

note de bas de page

Recommended Posts

Entrez dans stdin du conteneur Docker en cours d'exécution
jour de course des dockers (note)
Entrez dans l'obscurité de msync
Démarrez le conteneur Docker lors de l'exécution de Pytest
J'ai vérifié le contenu du volume du docker
Principes de base pour exécuter NoxPlayer en Python
J'étais en difficulté car le comportement du conteneur docker n'a pas changé
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
Divisez la chaîne de caractères en le nombre de caractères spécifié
Utilisez l'API Kaggle dans un conteneur Docker
Placez Python3 dans le conteneur Docker d'Amazon Linux2
Changer la résolution d'Ubuntu s'exécutant sur VirtualBox
Gratter les données gagnantes de Numbers à l'aide de Docker
Le processus d'installation d'Atom et de l'exécution de Python
Découvrez la version de la langue que vous utilisez
Obtenez le chemin absolu du script en cours d'exécution
Préparation de l'environnement d'exécution de PyTorch avec Docker Novembre 2019
Solution pour le serveur Gin inaccessible fonctionnant sur le conteneur Docker
J'ai essayé d'exécuter l'exemple de code du module Ansible