conteneur docker ne démarre pas parce existant fichier pid
Quand je commence un docker conteneur, il échoue en raison d'une existante du fichier pid:
[root@newhope sergio]# docker logs sharp_shockley
httpd (pid 1) already running
httpd (pid 1) already running
httpd (pid 1) already running
httpd (pid 1) already running
Comment puis-je supprimer ces fichiers, car je ne le trouve pas.
[root@newhope sergio]# docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8/1.4.1
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8/1.4.1
[root@newhope sergio]# find /-name "httpd.pid"
find: ‘/run/user/1000/gvfs’: Permiso denegado
Pouvez-vous poster un script qui crée l'erreur, en commençant à partir d'un menu fixe de l'image de votre choix de serveur web (apache? nignx?) sur le docker hub? Le problème peut être provoqué par commettre un récipient avec de l'exécution d'un serveur web dans une nouvelle image, puis en essayant de lancer la nouvelle image.
Mais j'ai besoin de commencer mon conteneur parce que j'avais des données. Problème surgissent lors de l'arrêt de l'hôte, en raison de la perte de puissance...
C'est un détail important. Le redémarrage d'un conteneur avec succès dans le menu fixe est fortement dépendant du conteneur, comme vous l'avez connu. Pour récupérer des données à partir d'arrêté de l'utilisation des conteneurs
Mais j'ai besoin de commencer mon conteneur parce que j'avais des données. Problème surgissent lors de l'arrêt de l'hôte, en raison de la perte de puissance...
C'est un détail important. Le redémarrage d'un conteneur avec succès dans le menu fixe est fortement dépendant du conteneur, comme vous l'avez connu. Pour récupérer des données à partir d'arrêté de l'utilisation des conteneurs
docker cp container-id:/path/to/data /path/on/host
de copier les répertoires à partir du récipient et à l'hôte. docker export
pouvez faire un fichier tar de l'ensemble du conteneur.OriginalL'auteur sebelk | 2015-02-22
Vous devez vous connecter pour publier un commentaire.
Essayer:
De détruire tous les environnements qui sont déjà en cours d'exécution.
En fait, c'est correct. Voir ma mise à jour de la réponse ci-dessus...ou éventuellement ci-dessous dans quelques semaines 🙂
Merci, j'ai d'abord pensé que cela est dû à des processus sur mon pc, mais cela a fonctionné 🙂
Cela fonctionne, mais ce n'est pas la méthode la plus simple pour résoudre ce problème particulier—esp. si vous êtes au milieu de quelque chose. La solution la plus simple est de débrancher le réseau (plus de détails dans ma réponse ci-dessous)
OriginalL'auteur styonsk
Après de trop de frustration, j'ai résolu ce problème dans ma cassé phabricator conteneur:
Vous devez savoir quel est le nom/chemin d'accès à l'adresse http du fichier pid est. Dans l'exemple ci-dessous c'est à
/run/apache2/apache2.pid
à l'intérieur du conteneur. Une fois que vous avez cela, vous exécutez les opérations suivantes:Ce que cela ne fait démarrer le conteneur, puis immédiatement à la tente d'exécuter la commande pour supprimer le fichier PID--espérons que d'ici quelque procédé que ce soit docker est censé commencer a du temps à l'échec. Si votre conteneur processus échoue rapidement cela pourrait ne pas fonctionner pour vous. Essayez un peu de temps et vous pourriez battre pour le punch.
Pour trouver l'emplacement de mon fichier PID, j'ai fait quelque chose de similaire à @sebelk, mais plutôt que de développer le fichier tar j'ai sauvé quelques fois par la liste de ses contenus et à la recherche du bon nom de fichier...comme:
Que c'est stupide, et il y a probablement une bien meilleure façon de regarder à travers le contenu du conteneur. Idéalement, vous pouvez trouver le nom du fichier PID d'une autre façon (commentaires bienvenus!).
Épiphanie
La réponse ci-dessus est utile, mais je me rends compte maintenant que moi et beaucoup d'autres ici ont mal compris menu fixe à un niveau fondamental. En fait, @styonsk de downvoted réponse ci-dessous est la bonne. Et, @avijendr du commentaire critique de c'est aussi correct: qui va détruire des données dans le conteneur--mais il ne devrait pas. Je vais vous expliquer.
Qui m'a été dit que Docker était "comme chroot mais en mieux." C'est truthy mais trompeuse. Dans une prison chroot, vos données de la vie à l'intérieur de la prison (bien sûr, sinon, comment le processus de la voir?). Alors, quand j'ai commencé à utiliser Docker, j'ai pensé que la fonctionnalité des Volumes a été un moyen d'obtenir les données dans le contenant, que vous pouvez monter le Volume de votre système local et de voir ce qui était en elle. Quand j'ai essayé, je me suis vraiment coché parce que c'était comme si le conteneur PERDU toutes mes données--l'app container agi de cette façon, et il n'y avait rien dans les locaux de la montée de l'emplacement! Mauvais mauvais mauvais.
Volumes dans le Panneau montage de vos données locales/les fichiers dans le récipient, et non pas l'inverse. Donc, quand j'ai monté le volume à un répertoire local vide (en comptant les fichiers dans le conteneur à paraître), au lieu du répertoire local vide a été monté dans le récipient, de cacher les fichiers qui existaient dans le récipient et faire de l'app regardez comme il avait perdu ses données (bien, parce qu'il avait). En réalité, le fait que le conteneur Docker fonctionne même sans le Volume monté est un effet secondaire, et sans doute l'un nuisible. Ce n'est pas son intention de travailler. Toutes les données sont écrites sur le Volume de l'emplacement à l'intérieur du conteneur est prévu pour être jetable!
(Soit dit en passant, j'ai commencé à utiliser Docker via Kitematic, qui va rassembler, de créer et de commencer un récipient en une seule étape sans vous demander où vous souhaitez monter votre Volumes, qui est en partie ce qui m'a donné la mauvaise idée je pense...maintenant, je crois personnellement qu'il ne faut pas commencer le conteneur jusqu'à ce que vous avez monté les Volumes de quelque part ou explicitement décidé de ne pas le faire.)
Donc l'utilisation prévue d'un conteneur Docker est généralement (et devrait être) pour exécuter le application à l'intérieur de le conteneur qui agit sur des données en dehors de le conteneur, qui est dans les Volumes qui sont montés par le biais de votre système local. Cela signifie que vous devrait être en mesure de simplement détruire le conteneur si quelque chose va mal avec elle et commencer une autre copie monté sur le même volume (vous récupérez toutes vos données en arrière, car il n'était pas dans le conteneur en premier lieu.
Donc, @styonsk réponse est la bonne réponse: si vous utilisez le Panneau correctement, vous devez juste être capable de détruire le conteneur et le feu jusqu'à une nouvelle. D'une part, cela semble exagéré, mais d'un autre côté, le point de conteneurisé application est que vous n'avez pas à savoir ce qu'il se passe à l'intérieur d'elle et, sans doute, vous n'avez pas...comment savez-vous la seule chose rompu après impure, l'arrêt est que le httpd.fichier pid est toujours là? Il pourrait y avoir beaucoup plus foiré que vous ne le savent pas! C'est sans doute ce que l'abstraction est pour.
Si ce modèle ne fonctionne pas pour votre cas d'utilisation--ou tout simplement vous n'aimez pas ça, la réponse est probablement que vous ne devriez pas être à l'aide d'un conteneur Docker. Ce n'est pas une mauvaise chose, c'est juste que vous tentez peut-être de mettre une vis à tête plate avec un tournevis pilote. Vous pouvez juste besoin d'un léger mais complet de la pile de l'environnement des machines virtuelles à la place.
OriginalL'auteur S'pht'Kr
Reconstruction/recréer pourrait aider.
docker-compose up --build --force-recreate <service-name>
Aussi, l'hôte (serveur physique) n'ont pas d'espace disque.
OriginalL'auteur luckydonald
Basé sur le commentaire de Paul et le panneau de la documentation, j'ai trouvé la solution:
Puis-je effectuer quelques corrections mineures, supprimer les fichiers temporaires dans /var/run/httpd, valider les modifications, puis je pouvais recommencer ma conteneur.
Plus d'informations à https://docs.docker.com/reference/commandline/cli/#importLe Panneau De La Ligne De Commande
OriginalL'auteur sebelk
Vous ne devriez pas avoir besoin de détruire le conteneur. Puisque vous n'avez pas bien arrêter le conteneur, il y a toujours des morceaux qui traînent. Plus précisément, le réseau est toujours connecté au conteneur.
essayer:
docker network list
Vous verrez quelque chose comme:
Puis tout ce que vous devez faire est de débrancher:
C'est bien
docker-compose down
trop, mais strictement parlant, il n'est pas nécessaire.OriginalL'auteur jonlink
quelque sorte uniquement vers le bas n'a pas fonctionné pour moi.
La meilleure solution pour moi était de faire un fichier bash comme donné ci-dessous. testé plusieurs fois moi-même, il a fait le nécessaire hack.
OriginalL'auteur Abhijit Gujar