Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

3.2K
Views
¿Cómo ejecutar scripts después de docker-compose up?

Estoy tratando de hacer que mi proceso de desarrollo sea más fácil/mantenible usando docker (-compose). No quiero usar ningún volumen (si eso es posible). ¿Por qué import.sh no se ejecuta después de ejecutar 'docker-compose up -d'?

Tengo los siguientes archivos:

 docker-compose.yml mysql ---- import.sh ---- db.sql ---- Dockerfile

en docker-compose.yml hay:

 version: '2' services: database: image: mysql build: context: ./mysql/ dockerfile: Dockerfile container_name: mysqltest ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: 123456

en /mysql/Dockerfile hay:

 ADD import.sh /tmp/import.sh ADD db.sql /tmp/db.sql RUN /tmp/import.sh

en /mysql/db.sql hay:

 CREATE DATABASE test1; CREATE DATABASE test2; CREATE DATABASE test3;
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede usar ENTRYPOINT o CMD en su Dockerfile para ejecutar un comando cuando se inicia el contenedor. La diferencia entre ellos es que ENTRYPOINT se ejecuta cada vez que se inicia el contenedor, mientras que CMD puede reemplazarse con una opción de línea de comando. Suponiendo que el comando que desea ejecutar es X

 docker run my-image Y

ejecutará X si ENTRYPOINT X estaba en el Dockerfile e Y si CMD X estaba en el Dockerfile.

Sin embargo, hay dos advertencias:

  1. El comando se ejecutará cada vez que se inicie el contenedor.
  2. Después de que el comando termina, el contenedor se cierra.

Por lo tanto, una solución típica es tener un script docker-entrypoint . Comprueba si se ejecuta en un contenedor nuevo iniciando su entorno y luego ejecuta el programa real del contenedor. Eche un vistazo al Dockerfile oficial de mysql y al punto de entrada para hacerse una idea.

Un script de punto de entrada de ejemplo podría verse así:

 $ cat docker_entrypoint.sh if [ ! -f .initialized ]; then echo "Initializing container" # run initializing commands touch .initialized fi exec "$@"

Primero, verifica si hay un archivo llamado .initialized . Si no hay ninguno, se ejecutan algunos comandos para inicializar el entorno del contenedor. Después de lo cual touch .initialized crea .initialized como un archivo vacío. Por lo tanto, los inicios posteriores del contenedor no volverán a ejecutar el comando de inicialización. En segundo lugar, inicia el servicio real. Hacer esto con exec reemplazará el proceso de shell con el proceso del servicio. Por lo tanto, docker mantendrá el contenedor en ejecución hasta que finalice el servicio. "$@" contendrá el "comando contenedor/imagen". Esto se establece con CMD X en el Dockerfile y se anula en el comando, como ya señalé anteriormente. Al usar exec "$@" , podrá iniciar diferentes programas en el contenedor para su inspección, por ejemplo, bash , e iniciar el servicio de forma predeterminada, como se especifica en la declaración CMD de Dockerfile.

over 4 years ago · Santiago Trujillo Report

0

Si solo desea inicializar su base de datos por primera vez, puede usar esta manera fácil.

 volumes: - [the scripts dir]:/docker-entrypoint-initdb.d

Inicializar una instancia nueva Cuando se inicia un contenedor por primera vez, se creará una nueva base de datos con el nombre especificado y se inicializará con las variables de configuración proporcionadas. Además, ejecutará archivos con extensiones .sh, .sql y .sql.gz que se encuentran en /docker-entrypoint-initdb.d. Los archivos se ejecutarán en orden alfabético. Puede llenar fácilmente sus servicios de mysql montando un volcado de SQL en ese directorio y proporcionar imágenes personalizadas con los datos aportados. Los archivos SQL se importarán de forma predeterminada a la base de datos especificada por la variable MYSQL_DATABASE.

El documento está aquí: https://docs.docker.com/samples/library/mysql/

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!