• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-8-3 10:12:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

我正在尝试使用S3s3fs存储桶安装到我的容器中。我有Dockerfile:

FROM tomcat:7.0
MAINTAINER [email protected]

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存储桶,并在创建镜像后通过运行run_docker.sh运行 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存储桶。

现在,我想在上运行此命令,并在我部署容器(并运行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"
  },
  "orts": [
    {
      "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配置对其进行重建。那应该做!



Best Answer-推荐答案


如果您使用的是最新版本的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'

注意运行脚本的位置和名称的更改

关于linux - 如何使用非默认运行参数在AWS Elastic Beanstalk中运行Docker容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28267419/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap