gpt4 book ai didi

amazon-web-services - 带有 Docker 和 EBS 卷的 EC2,在初始化期间将 EBS 卷安装在容器内

转载 作者:IT老高 更新时间:2023-10-28 21:26:00 26 4
gpt4 key购买 nike

我实际上试图用 Docker 实现一些目标,但我被卡住了,这是我的问题。

我的容器托管在 EC2 上,其中包含我的 Web 应用程序。我的 webapp 使用 JCR 存储库作为数据库,该存储库基本上是存储在您想要的位置的文件。所以每次我的网络应用程序启动时,如果存储库不存在,它会创建它,否则它会使用现有的。

我当前的 docker 文件看起来像这样 https://gist.github.com/agonist/7cab7358379e9dd6e812 ./chameleon.sh start 只是启动我的 webapp。在这个应用程序中,我配置了存储库文件的位置。

现在我创建了一个 EBS 卷,附加并安装在我的 EC2 实例中。此卷将专用于存储存储库。所以基本上在我的应用程序中,我将存储库路径配置为 /mnt/repository/ ,其中存储库是包含由我的 Web 应用程序创建的存储库文件的目录。但是我不知道如何在 Dockefile 中的 ./chameleon.sh start 之前将此卷安装到我的容器中。正如我在研究中看到的那样

docker run -v /mnt/repository:/mnt/repository aws_beanstalk/current-app

不能从 Dockefile 执行。

我还发现了有关与另一个容器共享一个卷的仅数据容器的内容,但如果我必须运行,仍然存在同样的问题

sudo docker run -d --volumes-from dbdata

我的容器启动后

最佳答案

短版:这不是答案,只是对它的一点帮助,说明 Docker 的工作原理。

不直接相关,但您的 Dockerfile 应该如下所示:

FROM dockerfile/java:oracle-java8

# Expose the port 9000
EXPOSE 9000

# Volumes
VOLUME /root/wisdom/logs
VOLUME /root/wisdom/application

# Change workdir.
WORKDIR /root/wisdom

RUN touch /root/wisdom.log

# Add the wisdom distribution
ADD . /root/wisdom

# For easier handling, we dump the log, so `docker logs containerId` displays
# the log.
CMD ./chameleon.sh start && tail -F logs/wisdom.log

这样,您在 ADD 之前的所有图层都会被缓存。而以前,如果您更改目录中的任何内容,则会重新创建所有图层。您的 chameleon.sh 应该是本地目录上的 chmod,而不是运行时。 ADD 保存权限。stop 不是必需的,因为当您启动容器时,您没有运行任何进程。

-v 确实不能从 Dockerfile 执行。这是意料之中的,因为 Dockerfile 是可移植的。如果您将其绑定(bind)到本地计算机,那么您将失去此功能。

当您执行 docker run -v/mnt/repository:/mnt/repository aws_beanstalk/current-app 时,挂载在执行命令之前完成。您可以通过运行 docker run -v/mnt/repository:/mnt/repository aws_beanstalk/current-app mount

来仔细检查

当使用--volumes-from时,也是一样的。卷在执行命令之前挂载。

那为什么会失败呢?我不确定,检查 mount 结果并使用您的 EBS 进行一些手动测试会很有趣。我有一些容器安装 EBS 卷,它工作正常。

关于amazon-web-services - 带有 Docker 和 EBS 卷的 EC2,在初始化期间将 EBS 卷安装在容器内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com