es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , ,

Answer

  1. Avatar for 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 script awsm_docker para reemplazar el comando docker-compose con singularity exec. Aquí hay un ejemplo:

    run_call = ('singularity exec'
                ' -B $PWD:/mnt'
                ' docker://usdaarsnwrc/awsm:0.10'
                ' docker-compose'
                ' -f ./{}/docker-compose.yml'
                ' run awsm /data/input/{}').format(fpc, cfg)
    call(run_call, shell=True, universal_newlines=True)
    

    Este comando ejecutará el comando docker-compose dentro del contenedor Singularity usdaarsnwrc/awsm y vinculará su directorio de trabajo actual a /mnt dentro del contenedor. Tenga en cuenta que el comando singularity 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 comando singularity build --from docker-compose. Una vez que se ha creado el contenedor, puede ejecutar el comando dentro del contenedor usando singularity exec. Aquí hay un ejemplo:

    # Convertir docker-compose.yml a un archivo de definición de Singularity
    singularity create awsm.sif
    singularity build --from docker-compose docker-compose.yml awsm.sif
    
    # Ejecutar el comando dentro del contenedor
    run_call = ('singularity exec'
                ' -B $PWD:/mnt'
                ' awsm.sif'
                ' run awsm /data/input/{}').format(cfg)
    call(run_call, shell=True, universal_newlines=True)
    

    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 usando singularity exec dentro del contenedor.

    ¡Espero que esto ayude! Hágame saber si tiene alguna otra pregunta.

Comments are closed.