如何在这个流星码头图像中部署应用程序?

时间:2014-11-19 14:27:09

标签: docker

我想使用https://github.com/CyCoreSystems/docker-meteor来运行我的流星应用程序。

我在github存储库中成功构建了Dockerfile的docker镜像。

我现在遇到的一个问题是我不确定运行docker镜像的命令。

关于如何使用图像的说明并不多。

如果我只是运行docker run -i -t ulexus/meteor /bin/bash,则会出现错误抱怨' /var/www/main.js'没找到。

但是如何在不运行容器的情况下将我的meteor应用程序源复制到容器中?

也许我需要使用类似示例中的示例: docker run --rm -e ROOT_URL=http://testsite.com -e REPO=https://github.com/yourName/testsite -e BRANCH=testing -e MONGO_URL=mongodb://mymongoserver.com:27017 ulexus/meteor

但是我的app repo是私有的,而不是github中的public。不确定如何在命令中指定我的用户名/密码。

==========

我用来创建图像的Dockerfile是:

# DOCKER-VERSION 1.2.0
# METEOR-VERSION 1.0.0
FROM stackbrew/ubuntu:trusty
RUN apt-get update
### For latest Node
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get install -y build-essential nodejs
###
### For standard Ubuntu Node
#RUN apt-get install -y build-essential nodejs npm
#RUN ln -s /usr/bin/nodejs /usr/bin/node
###
# Install git and curl
RUN apt-get install -y git curl
# Make sure we have a directory for the application
RUN mkdir -p /var/www
RUN chown -R www-data:www-data /var/www
# Install fibers -- this doesn't seem to do any good, for some reason
RUN npm install -g fibers
# Install Meteor
RUN curl https://install.meteor.com/ |sh
# Install entrypoint
ADD entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod +x /usr/bin/entrypoint.sh
# Add known_hosts file
ADD known_hosts /root/.ssh/known_hosts
EXPOSE 80
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
CMD []

===========

运行docker run -i -t ulexus/meteor /bin/bash后的错误消息:

Unable to locate server directory; hold on: we're likely to fail

module.js:340
    throw err;
          ^
Error: Cannot find module '/var/www/main.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

2 个答案:

答案 0 :(得分:3)

作为替代解决方案,请尝试以下操作:https://github.com/chriswessels/meteor-tupperware

它可以让您轻松地将Meteor.js应用程序转换为精简,生产就绪的Docker镜像。

来自使用文档:

  

快速启动

     

在Meteor.js项目目录中,运行以下命令:

     

curl https://raw.githubusercontent.com/chriswessels/meteor-tupperware/master/quickstart.sh > /tmp/quickstart.sh && sh /tmp/quickstart.sh

     

此脚本会将Dockerfile和.dockerignore写入当前目录,预配置如下。

     

在运行快速入门脚本并假设您运行Docker之后,您可以通过运行以下内容构建Meteor.js应用程序的图像:

     

docker build -t yourname/app .

免责声明:我是这个工具的作者。

答案 1 :(得分:0)

我不确定您对命令docker run -i -t ulexus/meteor /bin/bash的意思是什么,因为最后使用-i-t/bin/bash,这只是启动图像并运行交互式bash会话。这是如何产生main.js错误的?你的Dockerfile是什么样的?我使用以下命令运行启动简单sshd进程的测试服务器:docker run -p 22:22 --rm=true --name sshd-server sshd。此处启动了名为(在您的情况下为ulexus / meteor)sshd的图像,并且生成的容器的名称为sshd-server。请注意,最后缺少/bin/bash命令,以及-i-t,并且您的CMD条目中有CMD ["/usr/sbin/sshd", "-D"]项,这一点非常重要。 Dockerfile。这是我的FROM debian:wheezy RUN apt-get update RUN apt-get upgrade RUN apt-get -y install openssh-server RUN echo 'root:root' | chpasswd RUN mkdir /var/run/sshd CMD ["/usr/sbin/sshd", "-D"] EXPOSE 22 ,这里是Dockerfile本身的副本:

docker

你的CMD条目应该是启动流星的东西。

然后你的docker run -p hostPort:containerPort --rm ulexus/meteor 命令看起来像这样:

-i

再次注意,-t/bin/bashhostPort:containerPort丢失了。 ssh是我可以打开与容器的网络({{1}})连接。

希望有所帮助!