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

270
Views
Acceda a archivos de datos en la imagen de Docker desde el host

Sé que montar/usar un volumen al ejecutar una imagen sobrescribirá el directorio en el contenedor con el directorio en el host.

Me pregunto si esto se puede hacer al revés.

Tengo datos en my-image que se crearon durante la docker build .

 docker run -dit --volume ~/data:/usr/data my-image

Desde el comando anterior, el directorio host ~/data se asignará dentro del contenedor Docker al directorio /usr/data . Quiero el comportamiento opuesto, quiero que el directorio del contenedor /usr/data se asigne al host ~/data (esencialmente sobrescribiendo cualquier cosa dentro del directorio del host ~/data ).

es posible?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Aquí hay algunas ideas:

Vincular/montar carpeta de volumen

  1. Convierta una carpeta dentro del contenedor en un volumen (por ejemplo, marcándolo como un VOLUME dentro del Dockerfile )

  2. En el host, vincule o monte la carpeta de volumen en la ubicación deseada (según lo que funcione y lo que necesite). Esto es posible porque los volúmenes se encuentran dentro de /var/lib/docker/volumes/ ; solo necesita encontrar la carpeta correspondiente inspeccionando el contenedor.

El beneficio aquí es que puede acceder a los datos incluso si el contenedor no se está ejecutando.

Use FUSE, por ejemplo, sshfs

Una solución más "genérica" sería usar algo como sshfs .

Obviamente, requiere que su contenedor ejecute ssh y establezca la conexión antes de que se pueda acceder a los datos del contenedor.

over 4 years ago · Santiago Trujillo Report

0

Como @Tomasz sugiere una solución que también es posible, pero antes de publicar mi respuesta, compartiré nuestro caso de uso por qué hacemos esto.

asignamos el directorio /data/ del host en el momento de la creación con un directorio vacío del contenedor /root/data/ y luego copiamos un código remoto desde /home/tempdata/data/ a /root/data del contenedor que anula cualquier cosa en el directorio de montaje, es decir, ~/data del host durante el tiempo de arranque.

Entonces, como resultado, el usuario obtendrá el código más reciente del contenedor para alojar el directorio, lo que significa una forma de anular una forma un poco complicada de lograr el caso contrario.

 docker build -t override . docker run -it --rm --privileged -p 8081:8080 --name tt -v ~/data/:/root/data override

respuesta del contenedor docker después del arranque

Aquí está el Dockerfile basado en alpine

 FROM python:3.6-alpine RUN mkdir -p /etc/supervisord.d RUN apk add --no-cache supervisor git npm # general config for supervisord RUN echo $'[supervisord] \n\ [unix_http_server] \n\ file = /tmp/supervisor.sock \n\ chmod = 0777 \n\ chown= nobody:nogroup \n\ [supervisord] \n\ logfile = /tmp/supervisord.log \n\ logfile_maxbytes = 50MB \n\ logfile_backups=10 \n\ loglevel = info \n\ pidfile = /tmp/supervisord.pid \n\ nodaemon = true \n\ umask = 022 \n\ identifier = supervisor \n\ [supervisorctl] \n\ serverurl = unix:///tmp/supervisor.sock \n\ [rpcinterface:supervisor] \n\ supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface \n\ [include] \n\ files = /etc/supervisord # clone remote code so that can override local code of the user specified directory RUN git clone https://github.com/IBM-Bluemix/bluemix-hello-node /home/tempdata/data/ # copy code from container directory to host mount directory RUN echo $'#!/bin/ash \n\ echo "********************************8" \n\ mkdir -p /root/data/ \n\ mkdir -p /home/tempdata/ \n\ echo "*******Overiding /data/ of host machine ****" \n\ # this will override host machine files like if server.js modified on host this will overide with remote server.js cp -r /home/tempdata/data/ /root/ \n\ cd /root/data/; npm i; npm start' >> /root/override.sh RUN echo $'[supervisord] \n\ nodaemon=true \n\ [program:override] \n\ command=/root/override.sh \n\ stdout_logfile=/dev/fd/1 \n\ stdout_logfile_maxbytes=0MB \n\ stderr_logfile_maxbytes = 0 \n\ stderr_logfile=/dev/fd/2 \n\ redirect_stderr=true \n\ autorestart=false \n\ startretries=0 \n\ exitcodes=0 ' >> /etc/supervisord.d/override.conf RUN chmod +x /root/override.sh EXPOSE 8080 ENTRYPOINT ["supervisord", "--nodaemon", "--configuration", "/etc/supervisord.conf"]
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!