将 Perl Docker 容器部署到 Elastic Beanstalk
Deploying Perl Docker Container to Elastic Beanstalk
我正在构建一个 Docker 容器,它从 bitbucket 中提取 perl/mojolicious 存储库,但我遇到了问题。我的 Docker 文件是这样的:
# DOCKER-VERSION 0.3.4
FROM perl:latest
MAINTAINER My Name myname@name.com
# Update aptitude with new repo
RUN apt-get update
# Install software
RUN apt-get install -y git
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
ADD repo-key /root/.ssh/id_rsa
# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN cpanm Mojolicious
RUN cachebuster=b953b35 git clone -b branch git@bitbucket.org:org/project.git
EXPOSE 8080
WORKDIR project
CMD hypnotoad script/project
而且,在 docker build -t name/project .
上,它在本地构建良好并显示 "Successfully built."
我将它与 repo-key 文件一起压缩并将其提供给 Elastic Beanstalk,我单击上传和部署(我成功部署了 2048 游戏示例,并尝试复制它)。
返回 Dockerrun.aws.json: No such file or directory
。我认为这很奇怪,因为文档说 Dockerfile 或 Dockerrun.aws.json 可以独立用于不同的需求。但无论如何,我给了它一个简短的,希望无关紧要的,Dockerrun.aws.json,像这样:
{
"AWSEBDockerrunVersion": "1",
"Ports": [
{"ContainerPort": "8080"}
],
"Volumes": []
}
它仍然失败并且日志现在显示 [CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/04run.sh] command failed with error code 1:
并且进一步 Docker container quit unexpectedly after launch
。
有人可以帮我解决这些文件问题吗?
我明白了。问题是 hypnotoad
默认情况下在后台运行,这会使容器立即死亡。通过添加 -f
标志,它在前台运行并且容器持久存在。我也把 CMD
换成 ENTRYPOINT
.
#... same as above except for last line
WORKDIR project
ENTRYPOINT [ "hypnotoad", "-f", "./script/project" ]
您仍然必须无缘无故地同时向 EB 提供 Dockerfile 和 Dockerrun.aws.json,但即便如此,它仍然可以正常工作。
我正在构建一个 Docker 容器,它从 bitbucket 中提取 perl/mojolicious 存储库,但我遇到了问题。我的 Docker 文件是这样的:
# DOCKER-VERSION 0.3.4
FROM perl:latest
MAINTAINER My Name myname@name.com
# Update aptitude with new repo
RUN apt-get update
# Install software
RUN apt-get install -y git
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissions
ADD repo-key /root/.ssh/id_rsa
# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN cpanm Mojolicious
RUN cachebuster=b953b35 git clone -b branch git@bitbucket.org:org/project.git
EXPOSE 8080
WORKDIR project
CMD hypnotoad script/project
而且,在 docker build -t name/project .
上,它在本地构建良好并显示 "Successfully built."
我将它与 repo-key 文件一起压缩并将其提供给 Elastic Beanstalk,我单击上传和部署(我成功部署了 2048 游戏示例,并尝试复制它)。
返回 Dockerrun.aws.json: No such file or directory
。我认为这很奇怪,因为文档说 Dockerfile 或 Dockerrun.aws.json 可以独立用于不同的需求。但无论如何,我给了它一个简短的,希望无关紧要的,Dockerrun.aws.json,像这样:
{
"AWSEBDockerrunVersion": "1",
"Ports": [
{"ContainerPort": "8080"}
],
"Volumes": []
}
它仍然失败并且日志现在显示 [CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/04run.sh] command failed with error code 1:
并且进一步 Docker container quit unexpectedly after launch
。
有人可以帮我解决这些文件问题吗?
我明白了。问题是 hypnotoad
默认情况下在后台运行,这会使容器立即死亡。通过添加 -f
标志,它在前台运行并且容器持久存在。我也把 CMD
换成 ENTRYPOINT
.
#... same as above except for last line
WORKDIR project
ENTRYPOINT [ "hypnotoad", "-f", "./script/project" ]
您仍然必须无缘无故地同时向 EB 提供 Dockerfile 和 Dockerrun.aws.json,但即便如此,它仍然可以正常工作。