我想使用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
答案 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/bash
和hostPort:containerPort
丢失了。 ssh
是我可以打开与容器的网络({{1}})连接。
希望有所帮助!