Múltiples comandos en la directiva Docker CMD

Pregunta:

No entiendo lo que está sucediendo cuando intento ejecutar dos comandos en tiempo de ejecución a través de la directiva CMD en `Dockerfile. Supuse que esto debería funcionar:

CMD ["/etc/init.d/nullmailer", "start", ";", "/usr/sbin/php5-fpm"]

Pero no funciona. El contenedor no ha comenzado. Entonces tuve que hacerlo así:

CMD ["sh", "-c", "/etc/init.d/nullmailer start ; /usr/sbin/php5-fpm"]

No entiendo. ¿Porqué es eso? ¿Por qué la primera línea no es la forma correcta? ¿Alguien puede explicarme estas cosas del "formato de shell CMD frente al formato JSON, etc."? En palabras sencillas.

Solo para tener en cuenta: lo mismo docker-compose.yml con command: directive en docker-compose.yml , como se esperaba.

Respuesta:

Creo que la diferencia podría deberse a que el segundo comando procesa el shell mientras que el primero no. Según la documentación oficial , existen los formularios exec y shell . Su primer comando es un formulario exec . El formulario exec no expande las variables de entorno, mientras que el formulario de shell hace. Es posible que al usar el formulario exec el comando esté fallando debido a su dependencia del procesamiento del shell. Puede verificar esto ejecutando los docker logs CONTAINERID

Su segundo comando, la forma de shell, es equivalente a:

CMD /etc/init.d/nullmailer start ; /usr/sbin/php5-fpm

Extractos de la documentación –

Nota: A diferencia del formulario de shell, el formulario exec no invoca un shell de comandos. Esto significa que el procesamiento de shell normal no ocurre. Por ejemplo, CMD [ "echo", "$HOME" ] no realizará la sustitución de variables en $HOME . Si desea procesamiento de shell, utilice el formulario de shell o ejecute un shell directamente, por ejemplo: CMD [ "sh", "-c", "echo", "$HOME" ] .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım