首页 > 解决方案 > docker-compose 将主机上的文件内容更改同步到安装在 docker 容器上的卷

问题描述

我有一个脚本,每分钟使用 crontab 将文件上传到 S3 存储桶。我正在使用 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跟踪文件内容吗?

提前致谢。

标签: pythondockeramazon-s3docker-composecron-task

解决方案


推荐阅读