简体   繁体   English

如何使用 docker-compose 在 docker 内挂载 AWS EFS?

[英]How to mount AWS EFS inside docker using docker-compose?

I have an efs drive, with shared files, that i want to mount inside docker containers to be run on ECS.我有一个带有共享文件的 efs 驱动器,我想将它安装在 docker 容器中以在 ECS 上运行。 AWS has a suggested way to do it using task definition. AWS 有一个使用任务定义的建议方法。 However, I want to do it using docker-compose and not change task definitions that we manage through console etc.但是,我想使用docker-compose来完成,而不是更改我们通过控制台等管理的任务定义。

I am attaching snippet I am using below, but shared drive doesn't get mounted and gives following error per below.我在下面附加了我正在使用的代码段,但是共享驱动器没有被安装,并且在下面给出了以下错误。 It comes as empty and doesnt show shared efs.它是空的,不显示共享的 efs。 Can someone suggests as to what am I doing incorrectly here and how can i change dockerfile or docker-compose yml to get desired results.有人可以建议我在这里做错了什么以及如何更改 dockerfile 或 docker-compose yml 以获得所需的结果。

docker-compose.yml码头工人-compose.yml

version: "3.9"
services:
  server:
    build: .
    image: xyz
    command: "gunicorn -w 4 -k uvicorn.workers.UvicornWorker app.server:server -b 0.0.0.0:8000"
    volumes:
      - type: volume
        source: efs_volume
        target: /mnt/efs_xyz
volumes:
  efs_volume:
    driver: local
    driver_opts:
      type: "nfs4"
      o: "addr=fs-xxxxxx.efs.useast1.amazonaws.com,rw,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
      device: ":/"

Below is my Dockerfile下面是我的Dockerfile

FROM python:3.8-slim-buster
RUN apt-get update -y &&  apt-get install -y \
    vim \
    g++ \
    unixodbc-dev \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt Docker* docker* .docker* ./app/

RUN python -m pip install --no-cache-dir -r requirements.txt 

Error when running docker-compose up运行 docker-compose up 时出错

Cannot start service server: error while mounting volume '/var/lib/docker/volumes/app_efs_volume/_data': failed to mount local volume: mount :/:/var/lib/docker/volumes/app_efs_volume/_data, data: addr=fs-0bb4dbbf.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport: invalid argument

根据这个答案,只有type: nfs (not type: nfs4 ) 允许使用addr=<hostname>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM