docker使用minikube / kubernetes运行$ PATH问题

时间:2018-05-21 21:24:12

标签: docker kubernetes minikube

我一直试图让我的一个容器在minikube本地运行[我对这个FYI来说还是很新的]。 在构建容器之前,我一直运行eval $(minikube docker-env),当我运行docker镜像时,我可以看到列出的'new'容器。

这是我的docker文件供参考:

# start with python base
FROM python:3.6.4

# whom to come after if things break
LABEL maintainer="my_email_address"

# add tests to container
ADD . /app

ENV APP_PATH=/app

# set working directory
WORKDIR $APP_PATH

# install requirements for tests
RUN pip3 install --no-cache-dir -r requirements.txt

# clear all cached files
RUN find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

# set env variables
ENV TEST $TEST \
USERNAME $USERNAME \
PASSWORD $PASSWORD \
USERNAME2 $USERNAME2 \
PASSWORD2 $PASSWORD2 \
AUTH_TOKEN_1 $AUTH_TOKEN_1 \
AUTH_TOKEN_2 $AUTH_TOKEN_2

# type of command
CMD pytest $TEST

# clean up
RUN rm -rf /tmp/* && rm -rf /var/lib/apt/lists/*

然后我为minikube创建了这个yml文件,最后包含一个docker run命令来传递容器所期望的一些env变量。

build.yml

apiVersion: v1
kind: Pod
metadata:
  name: api-test-pod-k
spec:
 containers:
 - name: api-test-container-k
   image: api-test-container-k
   imagePullPolicy: IfNotPresent
   command: ["docker run -e USER=root -e USERNAME='email@address.com' -e PASSWORD='xxxx' -e USERNAME2='email2@address.com' -e PASSWORD2='xxxx' -e AUTH_TOKEN_1='XXXXXX' -e AUTH_TOKEN_2='XXXXXX' -e TEST='test_* -m smoke' api-test-container-k"]

当我尝试部署pod时,它最终处于

状态
kubectl get pods
NAME                           READY     STATUS              RESTARTS   AGE
api-test-pod-k                 0/1       RunContainerError   0          14s

并且日志显示以下内容:

kubectl logs -f api-test-pod-k
container_linux.go:265: starting container process caused "exec: \"docker run -e USER=root -e USERNAME='email@address.com' -e PASSWORD='xxxx' -e USERNAME2='email2@address.com' -e PASSWORD2='xxxx' -e AUTH_TOKEN_1='XXXXXX' -e AUTH_TOKEN_2='XXXXXX' -e TEST='test_* -m smoke' api-test-container-k\": executable file not found in $PATH"

令我感到困惑的是,我可以在没有minikube的情况下在本地运行此docker命令,没有任何问题。为什么minikube / K8会以不同的方式对待它?

我知道这是很多信息。非常感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

这一行似乎不正确:

command: ["docker run -e USER=root ...

在您的yaml中的command部分,您可以覆盖Dockerfile中的CMD行,但它是可选的。通常,您不希望这样做。在您的情况下,您尝试在容器内运行docker run,并且您看到的错误是说它无法在图像中的docker上找到$PATH命令。 / p>

最好将CMD pytest $TESTENTRYPOINT作为dockerfile中的最后一行。首先,您可以使用一些linter作为dockerfiles,例如this one