Tôi có một hộp chứa Docker chạy tốt trên máy phát triển địa phương của tôi. Tôi muốn di chuyển số này đến AWS Elastic Beanstalk, nhưng tôi đang gặp phải một chút rắc rối.Làm cách nào để chạy vùng chứa Docker trong AWS Elastic Beanstalk với các tham số chạy không mặc định?
Tôi đang cố gắng gắn một thùng S3
vào vùng chứa của mình bằng cách sử dụng s3fs
. Tôi có 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"]
Và tôi cài đặt s3fs
, gắn kết một xô S3
, và chạy Tomcat máy chủ sau khi hình ảnh đã được tạo ra, bằng cách chạy 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
Khi tôi xây dựng và chạy vùng chứa Docker này bằng cách sử dụng lệnh:
docker run --cap-add mknod --cap-add sys_admin --device=/dev/fuse -p 80:8080 -d username/mycontainer:latest
hoạt động tốt. Tuy nhiên, khi tôi xóa --cap-add mknod --cap-add sys_admin --device=/dev/fuse
, thì s3fs
không thể gắn kết nhóm S3
của tôi.
Bây giờ, tôi muốn chạy này trên AWS đàn hồi Beanstalk, và khi tôi triển khai các container (và chạy run_docker.sh
), tất cả các bước thực hiện tốt, ngoại trừ bước s3fs my-bucket /opt/s3-files
trong run_docker.sh
thất bại trong việc gắn kết xô .
Có lẽ, điều này là do bất kỳ Beanstalk đàn hồi nào để chạy vùng chứa Docker, nó không thêm bất kỳ cờ bổ sung nào như, --cap-add mknod --cap-add sys_admin --device=/dev/fuse
.
tập tin Dockerrun.aws.json
tôi trông như thế:
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "tomcat:7.0"
},
"Ports": [
{
"ContainerPort": "8080"
}
]
}
Có thể bổ sung thêm docker run
cờ đến một triển khai AWS EB Docker? Một tùy chọn thay thế là tìm một cách khác để gắn kết một nhóm S3
, nhưng tôi cho rằng tôi sẽ gặp phải các lỗi quyền tương tự bất kể. Có ai nhìn thấy bất kỳ cách nào để thực hiện điều này?
UPDATE:
Đối với những người cố gắng sử dụng @ Egor của câu trả lời dưới đây, nó hoạt động khi cấu hình EB được thiết lập để sử dụng v1.4.0 running Docker 1.6.0
. Mọi thứ qua phiên bản v1.4.0 đều không thành công. Vì vậy, để làm cho nó hoạt động, xây dựng môi trường của bạn như bình thường (mà sẽ cung cấp cho bạn một xây dựng không thành công), sau đó xây dựng lại nó với một cấu hình v1.4.0 running Docker 1.6.0
. Nên làm vậy!
Làm thế nào bạn có thể xây dựng lại một môi trường bằng cách sử dụng '1.4.0 chạy Docker 1.6.0' cấu hình? Bàn điều khiển EB dường như không cung cấp tùy chọn này, cũng không phải tài liệu. – zerodot