Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

252
Visualizações
leer/escribir en el mismo archivo desde varios contenedores docker

Tengo 4 contenedores (aplicación Java) en 4 hosts docker. necesitan leer/escribir en el mismo archivo.

el bloqueo de archivos no se puede utilizar debido a un sistema operativo diferente.

Entonces, traté de crear un archivo .lock, si uno de los 4 contenedores creó el archivo .lock, los otros contenedores tendrán que esperar. Pero esto todavía no está funcionando bien. Los otros contenedores no pueden ver el archivo .lock creado por otros contenedores a veces (no en tiempo real).

¿Hay otras soluciones?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Te sugiero que reconsideres tus suposiciones:

  • ¿Qué pasa si no tienes 4 sino 400 contenedores?
  • ¿Qué pasa si están en servidores que no comparten un sistema de archivos?

La forma limpia de hacer esto es escribir un servidor muy básico (si la carga lo permite, esto puede ser nginx+PHP y se puede hacer en 10 minutos) que escribe el archivo, ejecutarlo en otro contenedor y conectarse a él desde el otros contenedores. Esto te dará:

  • bloqueo de archivos fácil y confiable, ya que el archivo solo lo ve un servidor
  • escalabilidad
  • agrupabilidad
  • abstracción
over 4 years ago · Santiago Trujillo Relatório

0

Pruebe File lock api para implementar esto. Demostración en Java.

 public void modifyFile() { try { File file = new File("/tmp/fileToLock.dat"); // Creates a random access file stream to read from, and optionally to write to FileChannel channel = new RandomAccessFile(file, "rw").getChannel(); // Acquire an exclusive lock on this channel's file (blocks until lock can be retrieved) FileLock lock = null; // Attempts to acquire an exclusive lock on this channel's file (returns null or throws // an exception if the file is already locked. try { lock = channel.tryLock(); if (null != lock) { List<String> fileToString = FileUtils.readLines(file, StandardCharsets.UTF_8); long l = 0l; if (null != fileToString && fileToString.size() > 0) { l = Long.valueOf(fileToString.get(fileToString.size() - 1)); } l++; FileUtils.writeStringToFile(file, String.valueOf(l) + "\r\n", StandardCharsets.UTF_8, true); } } catch (OverlappingFileLockException e) { // thrown when an attempt is made to acquire a lock on aa file that overlaps // a region already locked by the same JVM or when another thread is already // waiting to lock an overlapping region of the same file System.out.println("Overlapping File Lock Error: " + e.getMessage()); channel.close(); } // release the lock if (null != lock) { lock.release(); } // close the channel channel.close(); } catch (IOException e) { System.out.println("I/O Error: " + e.getMessage()); } }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda