作者:永恆極光_822 | 来源:互联网 | 2023-05-23 23:23
我有一个Docker容器,可以在我的本地开发机器上运行.我想将其移至AWS Elastic Beanstalk,但我遇到了一些麻烦.
我正试图S3
通过使用将一个桶装到我的容器中s3fs
.我有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弹性魔豆,当我部署容器(和运行run_docker.sh
),所有的步骤执行很好,除了步骤s3fs my-bucket /opt/s3-files
中run_docker.sh
无法装入桶中.
据推测,这是因为无论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"
}
]
}
是否可以向docker run
AWS EB Docker部署添加其他标志?
另一种选择是找到另一种安装S3
存储桶的方法,但我怀疑无论如何我都会遇到类似的权限错误.有谁见过任何方法来完成这个???
更新:
对于尝试使用@ Egor的答案的人来说,当EB配置设置为使用时,它会起作用v1.4.0 running Docker 1.6.0
.任何超过v1.4.0版本的内容都会失败.因此,为了使其工作,正常构建您的环境(这应该会给您一个失败的构建),然后使用v1.4.0 running Docker 1.6.0
配置重建它.应该这样做!
1> 小智..:
如果您使用的是最新版本的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'
注意运行脚本的位置和&名称的更改