我有一个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重建它.应该这样做!