#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 в своем контейнере и проверять, отражены ли там изменения?