【发布时间】:2016-02-21 07:38:22
【问题描述】:
我正在尝试在使用 Kubernetes 在 Google Cloud Containers 上运行的 docker 容器的开头运行 shell 脚本。我的应用程序目录的结构是这样的。我想在容器的开头运行 prod_start.sh 脚本(虽然我不想把它作为 Dockerfile 的一部分)。当前设置无法使用Command not found file ./prod_start.sh does not exist 启动容器。知道如何解决这个问题吗?
app/
...
Dockerfile
prod_start.sh
web-controller.yaml
Gemfile
...
Dockerfile
FROM ruby
RUN mkdir /backend
WORKDIR /backend
ADD Gemfile /backend/Gemfile
ADD Gemfile.lock /backend/Gemfile.lock
RUN bundle install
web-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: backend
labels:
app: myapp
tier: backend
spec:
replicas: 1
selector:
app: myapp
tier: backend
template:
metadata:
labels:
app: myapp
tier: backend
spec:
volumes:
- name: secrets
secret:
secretName: secrets
containers:
- name: my-backend
command: ['./prod_start.sh']
image: gcr.io/myapp-id/myapp-backend:v1
volumeMounts:
- name: secrets
mountPath: /etc/secrets
readOnly: true
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 80
name: http-server
【问题讨论】:
-
有什么理由不能只将它包含在 Docker 映像中而不是在生产环境之外使用它吗?
-
我想我只是不想让 shell 脚本复杂化以检查我是否在生产中,然后基于此从 kubernetes 机密中正确设置环境变量设置。我也将相同的 Dockerfile 用于开发目的,我有一个
docker-compose.yaml,它运行一个dev_start.sh。 -
您可以只在映像中使用 prod_start.sh 脚本,但在不生产时运行不同的命令,不是吗?
-
您可以尝试使用脚本的绝对路径吗?
标签: docker kubernetes dockerfile google-kubernetes-engine