Le conteneur nginx personnalisé se ferme immédiatement lorsqu'une partie de docker-compose
Je suis en train d'apprendre comment utiliser le panneau de composer avec une simple configuration de nginx conteneur qui redirige les requêtes vers un fantôme conteneur. Je suis en utilisant le standard de l'image fantôme, mais une coutume nginx image (qui hérite de l'image standard).
Quand je lance la composition à l'aide de "docker-composer" il sort immédiatement avec "docker_nginx_1 quitté avec le code 0". Cependant, lorsque je créer et exécuter manuellement, il fonctionne très bien et je peux naviguer dans mon navigateur pour le conteneur et d'afficher la valeur par défaut de nginx page. Que suis-je malentendu à propos de mon composent le fichier qui l'amène à se comporter différemment que d'être construit sur mesure? Que puis-je modifier pour obtenir de rester en cours d'exécution?
Disclaimer: je suis aussi l'apprentissage de nginx comme je vais, donc, l'apprentissage de deux choses à la fois peut être en me faisant excessive problèmes.
EDIT:
Les fichiers originaux ont été un peu plus complexe, mais j'ai réduit la question simplement: Si j'utilise la commande créer une image personnalisée qui ne fait rien, mais héritent de la valeur par défaut de nginx image, il quitte immédiatement. Si j'utilise la valeur par défaut de nginx image, il fonctionne. Ce sont désormais des fichiers:
Composer fichier:
ghost:
expose:
- "2368"
image: ghost
nginx:
# image: nginx << If I use this instead of my custom build, it doesn't exit
build: ./nginx
ports:
- "80:80"
- "443:443"
links:
- ghost
nginx/Dockerfile:
FROM nginx
FICHIERS d'ORIGINE (avec le même composer de fichier comme ci-dessus):
nginx/Dockerfile:
FROM nginx
RUN rm /etc/nginx/nginx.conf
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/sites-available/ghost /etc/nginx/sites-available/ghost
RUN mkdir /etc/nginx/sites-enabled
RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
EXPOSE 80 443
# Is this even the right command I have no idea
CMD service nginx start
nginx/conf/nginx.conf:
daemon off;
user nginx;
# Let nginx figure out the processes I guess
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
nginx/conf/sites-available/ghost
server {
listen 80;
server_name 127.0.0.1;
access_log /var/log/nginx/localhost.log;
location /{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://0.0.0.0:2368;
proxy_redirect off;
}
}
L'exécution de composer:
plays-MacBook-Pro:docker play$ docker-compose up
Creating docker_ghost_1...
Creating docker_nginx_1...
Attaching to docker_ghost_1, docker_nginx_1
docker_nginx_1 exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping docker_ghost_1... done
Exécutant manuellement:
plays-MacBook-Pro:nginx play$ docker build --no-cache -t nginx_custom .
Sending build context to Docker daemon 8.704 kB
Step 0 : FROM nginx
---> 914c82c5a678
Step 1 : RUN rm /etc/nginx/nginx.conf
---> Running in 4ce9de96bb36
---> 98f97a9da4fc
Removing intermediate container 4ce9de96bb36
Step 2 : ADD conf/nginx.conf /etc/nginx/nginx.conf
---> dd3e089208a9
Removing intermediate container 36b9a47e0806
Step 3 : ADD conf/sites-available/ghost /etc/nginx/sites-available/ghost
---> 55fae53e5810
Removing intermediate container a82741d24af4
Step 4 : RUN mkdir /etc/nginx/sites-enabled
---> Running in 7659ead01b7b
---> 406be1c42394
Removing intermediate container 7659ead01b7b
Step 5 : RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
---> Running in e9658a08affa
---> 021a84216e8a
Removing intermediate container e9658a08affa
Step 6 : EXPOSE 80 443
---> Running in 230e4523794c
---> 23d85e1a04cb
Removing intermediate container 230e4523794c
Step 7 : CMD service nginx start
---> Running in 209e129cae21
---> d7004d6fa223
Removing intermediate container 209e129cae21
Successfully built d7004d6fa223
plays-MacBook-Pro:nginx play$ docker run -t nginx_custom
[It sits here on an empty line, running in the background]
source d'informationauteur Merrillogic
Vous devez vous connecter pour publier un commentaire.
Viens de tomber sur cette même question, et la première fixer était de modifier le nom du service dans
docker-compose.yml
.Cela a fonctionné, mais le raison il a fonctionné, c'est parce que Docker-composer des caches de la build & des liens vers le service le nom. Chaque
docker-compose up
après la première utilise juste ce qu'il construit avant, afin que toutes les modifications que vous apportez à laDockerfile
ou de la section de ladocker-compose.yml
sont fondamentalement ignoré.Lorsque vous (et moi) a changé le nom du service, il a déclenché une nouvelle version, puisque le nom de service n'a pas été marqué en avant.
La réel solution est de faire un: docker-composition de construire pour reconstruire l'image (suivi par un
docker-compose up
). Leur documentation n'est pas vraiment mettre l'accent sur cette question.Le CMD dans votre
Dockerfile
devraient démarrer un processus qui doit s'exécuter en arrière-plan. La commandeservice nginx start
exécute le processus démon mode, et donc votre conteneur sort proprement parce que leservice
commande ferme.Utilisation suivantes
CMD ["nginx", "-g", "daemon off;"]
pour commencer nginx (prises de image officielle) et cela devrait fonctionner correctement.Vous pouvez également ajouter un
tty: true
le service qui vous docker-composer.yml .. par exemple
webserver:
build: .
volumes:
- "./src:/var/www/html"
ports:
- 8080:80
depends_on:
- aap-mysql
tty: true
et il devrait rester à courir après
docker-compose up
J'ai compris ce que c'était. J'avais besoin de nom de la nginx partie de ma composition quelque chose d'autre que "nginx' . Je ne sais pas si c'est parce qu'il y a déjà un nginx image ou si c'est autre chose, mais en changeant de ce fait le travail correctement.
En modifiant mon fichier composer de:
J'ai été en mesure de l'obtenir pour fonctionner. Un indicateur est que lorsque le nom a changé, j'ai effectivement vu le processus de génération de la sortie de mon conteneur. Si quelqu'un sait exactement pourquoi la dénomination doit être de cette façon, j'aimerais savoir.