-1

我的 Docker 容器从 Git 中提取我的 Node 应用程序并安装所需的依赖项。但是,在初始运行后对 Docker Start 的后续调用会重新运行此逻辑。有没有办法可以将我的入口点脚本设置为仅在调用 Docker 运行时从 Git 中提取应用程序?我假设我总是可以在初始设置完成后将文件写入容器并在从 Git 中提取之前检查该文件?有没有更好更干净的方法来实现这种行为?

Dockerfile:

# Generic Docker Image for Running Node app from Git Repository
FROM    node:0.10.33-slim
ENV NODE_ENV production

# Add script to pull Node app from Git and run the app
COPY docker-node-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE  8080
CMD ["--help"]

入口点脚本:

#!/bin/bash
set -e
# Run the command passed in if it isn't to start a node app
if [ "$1" != 'node-server' ]; then
   exec "$@"
fi
# Logic for pulling the node app and starting it
cd /usr/src
# try to remove the repo if it already exists
rm -rf node-app; true
echo "Pulling Node app's source from $2"
git clone $2 node-app
cd node-app
# Check if we should be running a specific commit from the git repo
if [ ! -z "$3" ]; then
  echo "Changing to commit $3"
  git checkout $3
fi
npm install
echo "Starting the app"
exec node .
4

1 回答 1

1

git clone理想情况下,您的每个节点项目都有自己的Dockerfile,因此docker run您可以制作完全设置并准备好运行的容器,而不是推迟时间。

您可能可以将 Dockerfile 添加到每个 git repo 中,其中包含

FROM node:onbuild,这也将自动默认运行您的节点应用程序。

于 2014-12-04T06:44:10.127 回答