10
votes

Échec de la création du runtime Docker OCI: container_linux.go: 349: démarrage du processus de conteneur causé

Je travaille sur un projet depuis près d'un an, et ce projet a fonctionné dans Docker. Aujourd'hui, j'ai remarqué que les autorisations de l'ensemble du système de fichiers étaient passées à 777 (tous les fichiers "-rwxrwxrwx"). Je ne sais pas pourquoi tout cela s'est produit et je voulais y remédier.

J'ai exécuté deux commandes Bash:

Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
Error: failed to start containers:

Après cela, j'ai voulu voir le résultat et j'ai lancé cette commande ls -l et j'ai vu un tel message Permission denied , la pire chose qui puisse arriver. Je n'ai pas pu exécuter une seule commande et j'ai décidé de sortir du conteneur. Après cela, le cauchemar a commencé. Et maintenant, lorsque j'essaye de redémarrer le conteneur, j'obtiens l'erreur suivante

find ./ -type -d exec chmod 755 {} \;
find ./ -type -f exec chmod 644 {} \;

Je ne veux pas penser au pire, car je ne peux pas me permettre de perdre ce conteneur, j'en ai vraiment besoin. Mon système d'exploitation Ubuntu 18.04.


15 commentaires

Quelle version de docker avez-vous?


Peut-être avez-vous supprimé l'autorisation d'exécution ( x ) sur bash ou tout autre binaire dans /usr/local/bin ou où qu'il se trouve.


@dejdej 19.03.8


@ StefanGolubović mais avez des idées?


Est-il possible d'exécuter une commande dans un conteneur arrêté depuis l'hôte?


Pas vraiment, si vous faites un $docker ps -a vérifiez le nom du conteneur, puis $docker start -ai CONTAINER , vous avez la même erreur?


@ K-sS-k comment avez-vous essayé d' exec dans un conteneur?


docker exec commande docker exec exécute une nouvelle commande dans un conteneur en cours d'exécution ( docker ps montre des conteneurs en cours d'exécution) et docker start consiste à démarrer un conteneur arrêté ( docker ps -a montre des conteneurs arrêtés). Si votre conteneur est en cours d'exécution, vous pouvez essayer docker exec -itu 0 container_name /bin/sh ou docker exec -itu 0 container_name /bin/bash selon le shell que vous avez dans le conteneur.


Je suppose que vos données de conteneur sont en sécurité, sauf si vous avez utilisé l'indicateur --rm lors de l' docker run . Il vous suffit de réinitialiser les autorisations de vos fichiers à l'intérieur du conteneur pour les rendre exécutables. Je suis d'accord avec @dejdej - essayer docker ps --all est une bonne prochaine étape. Pouvez-vous voir votre conteneur (arrêté) dans cette liste?


@halfer je vois mon conteneur en essayant docker ps -a


Mais il docker start my_container donne une erreur


Je pense que tout de ce executable file not found in $PATH": unknown


Je serais enclin à essayer d'exécuter une commande chmod utilisant docker commit --change 'RUN find ./ -type -d exec chmod 777 {} \;' ( voir ici ). Cependant, vous devriez au moins sauvegarder vos conteneurs avant de le faire, et peut-être attendre que d'autres personnes ici vous conseillent à ce sujet également.


(Si je comprends bien, docker commit prend un système de fichiers de conteneur et exécute une nouvelle commande dessus, créant une nouvelle version du système de fichiers. Je pense que cela pourrait suffire à rendre le conteneur démarrable. Cependant, comme je l'ai dit, les sauvegardes sont essentielles ici).


Maintenant, j'obtiens ce docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\": permission denied": unknown. erreur docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\": permission denied": unknown.


3 Réponses :


2
votes

Vérifiez d'abord l'état du service: $systemctl status docker

Essayez un redémarrage: $systemctl restart docker

J'ai eu le même problème et la solution pour moi était de mettre à jour le fichier d'unité /etc/systemd/system/docker.service ( $systemctl edit docker.service ) plus exactement j'ai supprimé MountFlags=slave du fichier d'unité et ensuite $systemctl daemon-reload .


2 commentaires

Merci pour le conseil, je l'ai déjà vérifié, et il n'y a pas de MountFlags = slave


oui, le redémarrage complet de l'application docker a résolu mon problème ....



8
votes

L'ajout de "bash" dans le point d'entrée a fonctionné pour moi:

ENTRYPOINT ["bash","entrypoint.prod.sh"]


0 commentaires

1
votes

Dans mon cas, pour résoudre le message d'erreur, j'ai également dû activer l'intégration entre Docker Desktop pour Windows et la distribution Ubuntu exécutée sur WSL2. J'ai installé la distribution après Docker Desktop et j'ai oublié cette étape.

entrez la description de l'image ici


0 commentaires