Quiero configurar alguna configuración cuando se inicia mi contenedor, para esto estoy usando scripts de shell. Pero mi contenedor se cerrará tan pronto como finalicen mis scripts, lo he intentado con -d flag/modo separado pero nunca se ejecutará en modo separado.
A continuación se muestra mi Dockerfile
FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.shA continuación se muestra mi script de shell
#!/bin/bash echo Hello-dockerCorre sin ninguna bandera
docker run hello-dockerEsto imprimirá 'Hello-docker' en mi consola y saldrá
Ejecutar con banderas -itd
docker run -itd hello-docker y como debajo de la salida de mi consola, esta vez también saldrá pronto. :( 
La diferencia que vi está en la sección de COMANDO cuando ejecuto otras imágenes, la sección de comando mostrará "/ bin/bash" y continuará en modo separado.
Y cuando ejecuto mi imagen en el contenedor con el script de shell, la sección COMMAND mostrará "/bin/sh -c /usr/loca", y Salir.
Quiero ejecutar el contenedor hasta que no lo detenga manualmente.
EDITAR:
Después de agregar la instrucción ENTRYPOINT en Dockerfile, esto no ejecutará mi script de shell :(
FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh ENTRYPOINT /bin/bashSegún la documentación de la ventana acoplable aquí
CMD se anulará cuando se ejecute el contenedor con argumentos alternativos, por lo que si ejecuto la imagen de la ventana acoplable con algunos argumentos como se muestra a continuación, no se ejecutarán las instrucciones de CMD. :(
sudo docker run -it --entrypoint=/bin/bash <imagename>Un contenedor docker se ejecutará durante el tiempo que tome el CMD de su Dockerfile.
En su caso, su CMD consiste en un script de shell que contiene un solo eco. Entonces el contenedor saldrá después de completar el eco.
Puede anular CMD , por ejemplo:
sudo docker run -it --entrypoint=/bin/bash <imagename> Esto iniciará un shell interactivo en su contenedor en lugar de ejecutar su CMD . Su contenedor saldrá tan pronto como salga de ese caparazón.
Si desea que su contenedor permanezca activo, debe asegurarse de que su CMD siga ejecutándose. Por ejemplo, agregando la línea while true; do sleep 1; done en su archivo shell.sh, su contenedor imprimirá su mensaje de saludo y luego no hará nada más hasta que lo detenga (usando docker stop en otra terminal).
Puede abrir un shell en el contenedor en ejecución usando docker exec -it <containername> bash . Si luego ejecuta el comando ps ax , le mostrará que su shell.sh todavía se está ejecutando dentro del contenedor.
Finalmente, con algunos experimentos, obtuve mi mejor resultado como se muestra a continuación.
No hay nada de malo en mi Dockerfile, ya que a continuación es correcto.
FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.shLo que hago para obtener el resultado esperado es agregar un comando más (/bin/bash) en mi archivo de script de shell como se muestra a continuación y vola todo funciona de la mejor manera.
#!/bin/bash echo “Hello-docker” > /usr/hello.txt /bin/bashTambién puede modificar su primer Dockerfile, reemplazando
CMD /usr/local/bin/shell.sh
por
CMD /usr/local/bin/shell.sh ; sleep infinity
De esa manera, su secuencia de comandos no termina y su contenedor sigue ejecutándose.