Sustituto de docker-compose utilizando Linux Singularity
Gracias por ver mi pregunta!
Problema:
Soy bastante nuevo en docker y linux. Quiero ejecutar una imagen de docker en mi distribución de linux (versión CentOS 7), donde no tengo la capacidad de cambiar el root. Tengo instalado Singularity v.3.6.4 y descargo la imagen de docker usando:
module load singularity/3.6.4
singularity pull docker://usdaarsnwrc/awsm:0.10
Tenga en cuenta que, como no puedo cambiar el root, he establecido SINGULARITYTMPDIR y SINGULARITYCACHEDIR en mi directorio de inicio.
Esto funciona sin errores.
Luego descargo un caso de prueba:
git clone https://github.com/USDA-ARS-NWRC/awsm_test_cases.git
Y trato de ejecutarlo con el comando sugerido:
python ./awsm_docker –case tuol
Recibo el siguiente error:
/bin/sh: docker-compose: orden no encontrada
Traceback (most recent call last):
File "./awsm_docker", line 73, in <module>
run()
File "./awsm_docker", line 55, in run
os.remove('./{}/topo/maxus.nc'.format(fpc))
FileNotFoundError: [Errno 2] No such file or directory: './tuolumne/topo/maxus.nc'
Pregunta
Parece que este error proviene del script, awsm_docker, contenido en la carpeta de datos de prueba, que llama a docker-compose en dos instancias. Ej:
run_call = ('docker-compose'
' -f ./{}/docker-compose.yml'
' run awsm /data/input/{}').format(fpc, cfg)
call(run_call, shell=True, universal_newlines=True)
Entonces parece que mi problema es traducir docker-compose a un lenguaje compatible con singularity. ¿Alguna idea de cómo funcionaría esto?
¡Gracias por su ayuda!
davy.ai
Solución:
Como ha identificado correctamente, el problema parece estar relacionado con docker-compose, que no está disponible de manera predeterminada en Singularity. Sin embargo, hay algunas soluciones alternativas para hacer que funcione.
Un enfoque es usar el comando
singularity exec
para ejecutar el comando docker-compose dentro del contenedor Singularity. Puede modificar el scriptawsm_docker
para reemplazar el comando docker-compose consingularity exec
. Aquí hay un ejemplo:Este comando ejecutará el comando
docker-compose
dentro del contenedor Singularityusdaarsnwrc/awsm
y vinculará su directorio de trabajo actual a/mnt
dentro del contenedor. Tenga en cuenta que el comandosingularity exec
requiere la opción-B
para vincular el directorio.Otro enfoque es convertir el archivo
docker-compose.yml
a un archivo de definición de Singularity y crear un contenedor Singularity a partir de él. Singularity le permite crear un contenedor a partir de un archivo docker-compose con el comandosingularity build --from docker-compose
. Una vez que se ha creado el contenedor, puede ejecutar el comando dentro del contenedor usandosingularity exec
. Aquí hay un ejemplo:Este enfoque creará un contenedor Singularity a partir del archivo
docker-compose.yml
y vinculará su directorio de trabajo actual dentro del contenedor. Luego puede ejecutar el comando usandosingularity exec
dentro del contenedor.¡Espero que esto ayude! Hágame saber si tiene alguna otra pregunta.