【发布时间】:2015-03-31 18:57:25
【问题描述】:
我有一个 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"]
然后我安装s3fs,挂载S3 存储桶,并在创建映像后运行Tomcat 服务器,方法是运行run_docker.sh:
#!/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无法挂载bucket。
这大概是因为无论 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 配置设置为使用v1.4.0 running Docker 1.6.0 时,它可以工作。超过 v1.4.0 版本的任何内容都会失败。所以要让它工作,像平常一样构建你的环境(这应该会给你一个失败的构建),然后用 v1.4.0 running Docker 1.6.0 配置重建它。应该这样做!
【问题讨论】:
-
如何使用“1.4.0 running Docker 1.6.0”配置重建环境? EB 控制台似乎没有提供此选项,文档也没有。
标签: linux amazon-web-services amazon-s3 docker amazon-elastic-beanstalk