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.
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
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
Je l'ai fait avec @itsu_dev. Ce sera intéressant car Itsukun gratte le dessus.
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/
Recommended Posts