如何使用kubernetes将rails应用程序部署到Google容器引擎?
我已经尝试了很多方法来构build我的rails应用程序到一个泊坞窗的图像。 并将其部署到谷歌容器引擎。 但直到现在,没有人成功。
我的Dockerfile(在根轨道下)
FROM ruby:2.2.2 RUN apt-get update -qq && apt-get install -y build-essential RUN apt-get install -y nodejs ENV APP_HOME /myapp RUN mkdir $APP_HOME WORKDIR $APP_HOME ADD Gemfile $APP_HOME/Gemfile ADD Gemfile.lock $APP_HOME/Gemfile.lock ADD vendor/gems/my_gem $APP_HOME/vendor/gems/my_gem ADD init.sh $APP_HOME/ RUN export LANG=C.UTF-8 && bundle install ADD . $APP_HOME CMD ["sh", "init.sh"]
我的init.sh
#!/bin/bash bundle exec rake db:create db:migrate bundle exec rails server -b 0.0.0.0
我的kubernetesconfiguration文件
apiVersion: v1 kind: ReplicationController metadata: labels: name: web name: web-controller spec: replicas: 2 selector: name: web template: metadata: labels: name: web spec: containers: - name: web image: gcr.io/my-project-id/myapp:v1 ports: - containerPort: 3000 name: http-server env: - name: RAILS_ENV value: "production"
在我用kubectl创buildweb控制器之后:
kubectl create -f web-controller.yml
并查看Pod日志:
kubectl logs web-controller-xxxxx
表明:
init.sh: 2: init.sh: bundle: not found init.sh: 3: init.sh: bundle: not found
似乎没有findpath。 那怎么办?
您可以使用kubectl exec来input您的容器并打印环境。 http://kubernetes.io/v1.1/docs/user-guide/getting-into-containers.html
例如:kubectl exec web-controller-xxxxx sh -c printenv
您也可以使用kubectl以交互方式确认捆绑包在您的容器图像中:
kubectl exec -ti web-controller-xxxxx sh
如果bundle位于映像中,则可以将其目录添加到init.sh中的PATH中,或者在每个命令中明确指定其path。
也许你应该直接执行你的init.sh
而不是sh init.sh
? 看起来$PATH
和其他ENVvariables没有被设置为sh init.sh
shell。 如果你可以在容器中执行, which bundle
显示了which bundle
的path,那么当你使用sh init.sh
执行时,你将失去login的sh init.sh
。
如果有帮助的话,我已经写了一个关于如何在KKE上部署GKE的Rails。 你可能想要改变的一件事是,如果你有几个你的networking豆荚运行,他们都将运行init.sh
脚本,他们都会尝试db:migrate
。 将有一个迁移的种族条件,以什么顺序(如果你有很多)。 您可能只想在部署期间从一个容器运行db:migrate
。 您可以使用Kubernetes作业来完成该操作,或者使用kubectl run migrator --image=us.gcr.io/your/image --rm --restart=Never
在执行db:migrate
任务之前,新的networking豆荚。
- Rails 5,Kubernetes和Google Container Engine
- 无法从Google计算引擎实例运行gcloud docker push
- Neo4j – 如何使用Docker镜像从安全连接访问螺栓?
- 在Docker容器里推荐GCE服务帐号authentication?
- gcloud docker命令是做什么的?
- 如何在Google Container Engine上运行私人泊坞窗图片
- 从BigQuery获取(stream)数据到R(Docker中的Rstudio服务器)的最佳方式是什么?
- – 在Google容器引擎中添加cap-add
- GCloud:将文件从本地机器复制到Docker容器中