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.

Docker mkdir no creará un directorio.

Estoy intentando ejecutar un script de bash que debería cargar datos en Jena. Este script proviene de un repositorio de GitHub enlace y, supuestamente, funcionaba en la máquina del propietario, pero en la mía no se ejecuta, a pesar de que seguí las instrucciones. Permítanme describir primero lo que hace el script según mi entendimiento: debería cargar datos .nt (datos RDF) en Jena utilizando Docker y la imagen de jena, llamada stain/jena. Aquí está el script:

#/bin/bash
files=$(echo $(pwd)/rawdata-bearb/hour/alldata.IC.nt/*.nt | sed "s%$(pwd)/rawdata-bearb/hour/alldata.IC.nt%/var/data/in%g")
mkdir output # added

for file in $files; do
    v=$(echo $file | sed "s/^.*\/\([0-9][0-9]*\)\.nt$/\1-1/" | bc)
    echo "$v"
    mkdir -p /var/data/out/ic/$v
    time docker run \
        -it \
        --rm \
        -v $(pwd)/tdb-bearb-hour/:/var/data/out/ \
        -v $(pwd)/rawdata-bearb/hour/alldata.IC.nt/:/var/data/in/ \
        stain/jena /jena/bin/tdbloader2 \
            --sort-args "-S=16G" \
            --loc /var/data/out/ic/$v $file \
            > output/load-bearb-hour-ic-$v-.txt
done

Sin embargo, cuando ejecuto el script, obtengo el siguiente mensaje del archivo de registro guardado:

13:12:46 INFO -- TDB Bulk Loader Start
mkdir: cannot create directory ‘/var/data/out/ic/0’: No such file or directory
13:12:46 ERROR Failed during data phase

Según el manual de tdbloader2, el parámetro –loc debería crear el directorio si no existe:

--loc: Establece la ubicación en la que se creará la base de datos.
Esta ubicación debe ser un directorio y debe estar vacía, 
si se especifica una ruta que no existe, se creará como un nuevo directorio.

Creé manualmente los directorios /var/data/out/ic/0 – /var/data/out/ic/10 y volví a ejecutar el script. Sin embargo, obtuve el mismo mensaje de error. Mi primera suposición fue que tdbloader2 o Docker usan el comando mkdir sin el parámetro -p, pero dado que creé manualmente los directorios y aún así obtengo el mismo error, debe ser algo más. Les agradezco su ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que a pesar de usar el parámetro –loc, el TDB Bulk Loader en el contenedor de Docker no puede crear el directorio si no existe. Esto podría ser debido a un problema de permisos o un error en la imagen del contenedor.

    Para resolver este problema, puedes intentar modificar el script para incluir la bandera -p en el comando mkdir de la siguiente manera:

    mkdir -p /var/data/out/ic/$v
    

    Esto creará el directorio y cualquier directorio padre necesario si no existen.

    También puedes intentar ejecutar el script con privilegios de sudo o verificar los permisos en los directorios para asegurarte de que sean escribibles por el usuario que ejecuta el contenedor de Docker.

    Si estos pasos no resuelven el problema, puedes intentar contactar al propietario del repositorio o al responsable del mantenimiento del contenedor de Docker para obtener más ayuda.

Comments are closed.