LINUX.ORG.RU

Синхронизация файлов внутри Docker контейнера

 


0

1

Только начинаю разбираться с Docker, прошу не пинать сильно. Задача - обновлять файл настроек в корневой папке контейнера. docker cp выполняется в терминале, но файл не создается. Пытался примонтировать папку на хосте в контейнер docker run -v (что конечно было бы удобнее). Это работает, только если указана целевая папка в контейнере. Примонтировать, чтобы файлы появлялись в корне контейнера не получается. Том монтируется, файлы не появляются. Как примонтировать папку, чтобы изменять фалы в корне контейнера, или есть другой способ?

Задача - обновлять файл настроек в корневой папке контейнера

Не надо так.

или есть другой способ

Обычные способы передачи параметров приложению внутрь контейнера:

  • переменные окружения
  • монтирование каталогов хоста с файлами конфигурации по стандартному для приложения пути внутри контейнера, например /path/to/host/nginx/configs/ -> /etc/nginx/conf.d
vvn_black ★★★★★
()

Изменяемые данные в контейнере должны монтироваться через volume Cмонтировать каталог /opt/datadir/ хоста в каталог /var/lib/mysql в котнейнере(Bind mounting):

docker run -v /opt/datadir/:/var/lib/mysql имя

Дальше на хосте в каталоге /opt/datadir меняешь что тебе надо. Оно поменяется и в контейнере.

torm7
()

Задача - обновлять файл настроек в корневой папке контейнера.

Это неверный путь, если только затем не последует пересборка. Передавать конфигурацию в контейнер обычно принято через ENV.

Если уж совсем нужно файл туда прокинуть (ну как nginx.conf с nginx, например), то монтируй либо его куда нужно из каталога рядом, либо сам каталог с файлом. Тогда при изменении файла на хосте будет «меняться» и файл «в контейнере».

Zhbert ★★★★★
()
Ответ на: комментарий от torm7

Спасибо. Это я делал. Проблема в том, что мне нужен доступ в корневой каталог контейнера.

docker run -v /opt/datadir/ имя 

Такая команда выполняется, том монтируется, но файлы помещенные в /opt/datadir/ в контейнере не появляются.

Leopoll
() автор топика
Ответ на: комментарий от Zhbert

Да, нужен именно файл прокинуть. Добавить пользователя со всеми сохраненными настройками на сервер blynk, там это только так работает. В принципе, файлы, что есть в контейнере не особо и нужны (хотя доступ к ним тоже неплохо было бы), главное - закинуть этот файл, но именно в КОРЕНЬ контейнера, и менять его время от времени.

Leopoll
() автор топика
Ответ на: комментарий от Leopoll

Так положи его в любое другое место и уже в докере по крону или ещё как-то ещё куда надо копируй и всё что надо перезапускай.

Хотя я бы просто, наверно, образ пересоздавал и перезапускал контейнер.

vitruss ★★★★★
()
Последнее исправление: vitruss (всего исправлений: 1)
Ответ на: комментарий от vitruss

То есть в корень никак. Это все усложняет. Раньше мне удавалось скопировать нужный файл командой docker cp. Наверно также можно его и перезаписать. Но сейчас это почему то не работает.

docker cp /home/user/file.sss blynk:

Выполняется в терминале, но файл в контейнере не появляется.

Leopoll
() автор топика
Ответ на: комментарий от Leopoll

Почему никак? Ещё раз, это надо делать средствами внутри контейнера. Крон, который работает внутри, например. Это не правильный с точки зрения докера вариант, но возможный.

А что мешает перезапустить контейнер?

vitruss ★★★★★
()
Ответ на: комментарий от vvn_black

Сорри, слеш конечно был, запамятовал.

docker cp /home/user/file.sss blynk:/

Файл все равно не появляется.

docker exec blynk ls

показывает прежний набор файлов. В чем может быть причина?

Leopoll
() автор топика
Ответ на: комментарий от Leopoll

docker exec blynk ls

эта команда покажет список файлов в WORKDIR, а не в корне. Покажи Dockerfile, будет проще обсуждать.

das_tier ★★★★★
()
Последнее исправление: das_tier (всего исправлений: 1)
Ответ на: комментарий от das_tier

Спасибо, уже не ждал ответа. Вот файл.


FROM arm32v7/openjdk:11-jre
MAINTAINER Max Leonov <hi@maxleonov.pw>

ENV BLYNK_SERVER_VERSION 0.41.14
RUN mkdir /blynk
RUN curl -L https://github.com/blynkkk/blynk-server/releases/download/v${BLYNK_SERVER_VERSION}/server-${BLYNK_SERVER_VERSION}.jar > /blynk/server.jar

# Create data folder. To persist data, map a volume to /data
RUN mkdir /data

# Create configuration folder. To persist data, map a file to /config/server.properties
RUN mkdir /config && touch /config/server.properties
VOLUME ["/config", "/data/backup"]

# IP port listing:
# 8080: Hardware without ssl/tls support
# 9443: Blynk app, https, web sockets, admin port
EXPOSE 8080 9443

WORKDIR /data
ENTRYPOINT ["java", "-jar", "/blynk/server.jar", "-dataFolder", "/data", "-serverConfig", "/config/server.properties"]
Leopoll
() автор топика