linux – 如何使用非默认运行参数在AWS Elastic Beanstalk中运行Docker容器?

我有一个Docker容器,可以在我的本地开发机器上运行.我想将其移至AWS Elastic Beanstalk,但我遇到了一些麻烦.

我正在尝试使用s3fs将S3存储桶安装到我的容器中.我有Dockerfile:

FROM tomcat:7.0
MAINTAINER me@example.com

RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential libfuse-dev libcurl4-openssl-dev libxml++2.6-dev libssl-dev mime-support automake libtool wget tar 

# Add the java source
ADD . /path/to/tomcat/webapps/
ADD run_docker.sh /root/run_docker.sh
WORKDIR $CATALINA_HOME

EXPOSE 8080

CMD ["/root/run_docker.sh"]

我通过运行run_docker.sh来安装s3fs,安装S3存储桶,并在创建映像后运行Tomcat服务器:

#!/bin/bash
#run_docker.sh

wget https://github.com/s3fs-fuse/s3fs-fuse/archive/master.zip -O /usr/src/master.zip;
cd /usr/src/;
unzip /usr/src/master.zip;
cd /usr/src/s3fs-fuse-master;
autoreconf --install;
CPPFLAGS=-I/usr/include/libxml2/ /usr/src/s3fs-fuse-master/configure;
make;
make install;
cd $CATALINA_HOME;

mkdir /opt/s3-files;
s3fs my-bucket /opt/s3-files;
catalina.sh run

当我使用以下命令构建并运行此Docker容器时:

docker run --cap-add mknod --cap-add sys_admin --device=/dev/fuse -p 80:8080 -d username/mycontainer:latest

它运作良好.然而,当我删除–cap-add mknod –cap-add sys_admin –device = / dev / fuse时,s3fs无法挂载我的S3存储桶.

现在,我想在AWS Elastic Beanstalk上运行它,当我部署容器(并运行run_docker.sh)时,所有步骤都可以正常执行,除了run_docker.sh中的步骤s3fs my-bucket / opt / s3-files无法安装存储桶.

据推测,这是因为无论Elastic Beanstalk运行Docker容器,它都不会添加任何额外的标志,例如–cap-add mknod –cap-add sys_admin –device = / dev / fuse.

我的Dockerrun.aws.json文件如下所示:

{
  "AWSEBDockerrunVersion": "1","Image": {
    "Name": "tomcat:7.0"
  },"Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

是否可以向AWS EB Docker部署添加额外的docker run标志?
另一种选择是找到另一种方法来安装S3存储桶,但我怀疑我会遇到类似的权限错误.有谁见过任何方法来完成这个???

更新:

对于尝试使用@ Egor的答案的人来说,当EB配置设置为使用运行Docker 1.6.0的v1.4.0时,它会起作用.任何超过v1.4.0版本的内容都会失败.因此,为了使其工作,正常构建您的环境(这应该会给您一个失败的构建),然后使用运行Docker 1.6.0配置的v1.4.0重建它.应该这样做!

最佳答案
如果您使用的是最新版本的aws docker stack(例如docker 1.7.1),则需要稍微修改上述答案.试试这个:

commands:
    00001_add_privileged:
        cwd: /tmp
        command: 'sed -i "s/docker run -d/docker run --privileged -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh'

注意位置的变化&&运行脚本的名称

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...