docker-compose синхронизирует изменения содержимого файла на хосте с томом, установленным в контейнере docker

#python #docker #amazon-s3 #docker-compose #cron-task

#python #docker #amazon-s3 #docker-compose #cron-задача

Вопрос:

У меня есть скрипт, который загружает файл в корзину S3 каждую минуту с помощью crontab. Я использую docker для запуска скрипта, мне нужно, чтобы изменения, внесенные в файл на хосте, были отражены в контейнере docker и загружены в корзину S3.

Скрипт загружается /data/boo.txt на S3 каждую минуту.

 import boto3

s3 = boto3.client('s3')
s3_bucket_name = 'ap-rewenables-feature-data'

with open("/data/boo.txt", "rb") as f: 
    s3.upload_fileobj(f, s3_bucket_name, "boo.txt")
  

Моя библиотека Dockerfile установки boto3 с использованием pip устанавливает учетные данные aws и использует crond для запуска скрипта с запланированными интервалами.

 FROM python:3.7-alpine

WORKDIR /scripts

RUN pip install boto3

ENV AWS_ACCESS_KEY_ID=#########
ENV AWS_SECRET_ACCESS_KEY=##########

COPY s3-file-upload-crontab /etc/crontabs/root
RUN chmod 644 /etc/crontabs/root

COPY s3_operations.py /scripts/s3_operations.py
RUN chmod  x /scripts/s3_operations.py

ENTRYPOINT crond -f
  
 */1 * * * * python /scripts/s3_operations.py
  

Из того, что я знаю, я должен использовать bind mount для синхронизации каталога между хостом и контейнером. Я использую docker-compose.yml для определения службы и bind mount .

 version: "3.8"
services:
  data-transfer:
    image: ap-aws-s3-file-upload 
    build:
      context: ./
    volumes:
      - ./data:/data
  

Запуск docker-compose up создает контейнер, скрипт запускается каждую минуту и загружает файл. Но у меня возникли проблемы с синхронизацией содержимого файла между хостом и контейнером. Независимо от того, какие изменения я вношу в boo.txt файл в корзине S3, они не отражаются.

Я не уверен, где я ошибаюсь, не следует bind mount отслеживать содержимое файла?

Заранее спасибо.

Комментарии:

1. Просто используйте демон cron хоста; не беспокойтесь о Docker здесь. (Также посмотрите на свое изображение docker history и решите, скомпрометировали ли вы свои учетные данные AWS и нужно ли их менять.)

2. @DavidMaze обычно я бы так и сделал, но поскольку это необходимо выполнить на нескольких компьютерах, а остальная часть проекта уже оптимизирована для docker, я пытаюсь сохранить его согласованным. Что касается учетных данных, это новая учетная запись, не уверен, сколько могло произойти за день.

3. Вы уверены, что вносили изменения в правильный файл? Ваш файл compose имеет относительный путь монтирования, который вычисляется в соответствии с каталогом, из которого вы запускаетесь docker-compose up .

4. @EY да, я запускаюсь docker-compose up из той же папки, в которой находится docker-compose.yml , смогу ли я вообще запустить его вне проекта? В этой папке есть data каталог, с boo.txt которым синхронизируется файл, который я пытаюсь сохранить. Даже если я переключаю путь к хосту с ./data на полный путь /home/$USER/git-projects/ap_renewables/aws-s3-poc/data , ничего не меняется.

5. Вы пробовали выполнять docker exec в своем контейнере и проверять, отражены ли там изменения?