Maison  >  Article  >  Opération et maintenance  >  Comment Docker empêche le conteneur de sortir automatiquement

Comment Docker empêche le conteneur de sortir automatiquement

WBOY
WBOYoriginal
2022-03-08 10:40:215709parcourir

Dans Docker, vous pouvez ajouter un processus frontal résident au conteneur afin que le conteneur ne se ferme pas automatiquement. Vous pouvez utiliser les paramètres interactifs et tty du conteneur Docker pour activer la commande "sh/bash" comme potentiel. commande, afin que le conteneur ne se ferme pas automatiquement.

Comment Docker empêche le conteneur de sortir automatiquement

L'environnement d'exploitation de ce tutoriel : système linux7.3, version docker-1.13.1, ordinateur Dell G3.

Comment Docker empêche le conteneur de se fermer automatiquement

docker Le cycle de vie du conteneur est lié au pré-traitement dans le conteneur. C'est aussi la raison pour laquelle nous pouvons rencontrer certains conteneurs qui ne fonctionnent que pendant quelques secondes et se terminent. automatiquement : car il n'y a pas de processus frontal résident dans le conteneur. Une fois l'exécution du processus frontal terminée, le conteneur se ferme automatiquement.

Par exemple, docker hello-world

# 一闪而过 输出一堆东西
docker run --name hello-world hello-world
# 可以看到 hello-world 容器已经退出了
docker ps -a

Comment puis-je empêcher le conteneur de se fermer automatiquement ? Si nous voulons nous connecter à un conteneur pur tel que alpine/centos/ubuntu, installez certains composants de service basés sur celui-ci, puis validez-le dans notre propre image.

Il existe de nombreuses méthodes sur Internet pour exécuter une boucle infinie while(true) (bien sûr, dormir un moment) ou utiliser tail -f /dev/null lors de la création d'un conteneur. Quoi qu'il en soit, il s'agit d'ouvrir un front permanent. Définissez le processus comme objectif. En fait, nous pouvons utiliser les paramètres interactifs et tty du conteneur docker de manière plus élégante pour ouvrir la commande sh/bash (*nix system must have) en tant que pré-commande, afin que le conteneur ne se ferme pas automatiquement.

Par exemple, utilisez l'image alpine comme image de base pour créer un petit conteneur de système alpin afin qu'il puisse s'exécuter en permanence afin que nous puissions nous connecter et exécuter certaines commandes de manière interactive.

# 使用 alpine 系统镜像创建容器
# -i interactive=true 开启 stdin
# -t tty=true 分配会话终端
# -d 守护模式 不加也可以 不加就直接进入容器中了 需要 ctrl+p+q 切出
# 不能 exit 哟, exit 相当于结束 sh 会话了 容器会退出的
docker run -it -d --name alpine alpine sh
# alpine 肯定在运行
docker ps
# 登入容器
docker exec -it alpine sh
# apline 使用的 apk 作为包管理
# 安装个小火车
# 后续可以使用 docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl 生成新的镜像
apk add sl
# 退出容器 注:-d 启动的才可以,如果没有 -d 启动直接进入的 sh终端 则不能退出,否则容器也会退出
exit

Soumettre les modifications du conteneur pour générer une nouvelle image

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl
# 后续停止/启动容器时就不需要在指定 -it 参数了
docker stop alpine
docker start alpine

Soumettre les modifications du conteneur pour générer une nouvelle image

docker commit -m "alpine with sl cmd" -a "big_cat" alpine big_cat/alpine_sl
docker images
# 有账号的话发布到 docker hub 上去
docker push big_cat/alpine_sl

La commande ci-dessus utilise en fait le terminal de session sh/bash comme pré-processus, de sorte que le conteneur ne se ferme pas automatiquement .

Si vous pensez qu'écrire ainsi lors de la création d'un conteneur sera grossier, cela n'a pas d'importance, nous pouvons les pousser vers docker-compose

docker-compose.yml
version: '3'
 
services:
     big_cat_alpine:
     container_name: big_cat_alpine
     image: alpine
     stdin_open: true # -i interactive
     tty: true # -t tty
     privileged: true
     entrypoint: ["sh"] # 执行 sh

Créer un conteneur et un conteneur de connexion

docker-compose up -d big_cat_alpine ./
docker ps
docker exec -it big_cat_alpine sh

Transmettre ces deux paramètres via docker-compose , démarrez le conteneur de services après l'orchestration.

Apprentissage recommandé : "Tutoriel vidéo Docker"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn