docker - docker run $PATH 问题与 minikube / kubernetes
问题描述
我一直在尝试让我的一个容器在本地运行 minikube [我对所有这些仅供参考还是很陌生]。在构建容器之前,我一直在运行 eval $(minikube docker-env),当我运行 docker 映像时,我可以看到列出的“新”容器。
这是我的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 命令来传递容器期望的一些环境变量。
构建.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"
让我感到困惑的是,我可以在本地运行此 docker 命令,而无需混合使用 minikube,没有任何问题。为什么 minikube / K8 会有不同的处理方式?
我知道这是很多信息。非常感谢您的宝贵时间。
解决方案
这条线似乎不正确:
command: ["docker run -e USER=root ...
在 yaml 的那个command
部分中,您可以覆盖CMD
Dockerfile 中的行,但它是可选的。通常,您不想这样做。在您的情况下,您正在尝试在容器内部运行,并且您看到的错误是说它在图像中docker run
找不到docker
您的命令。$PATH
CMD pytest $TEST
将orENTRYPOINT
作为 dockerfile 的最后一行也是一个好习惯。首先,您可以为 dockerfiles 使用一些 linter,例如这个.
推荐阅读
- webpack - 生产 webpack 构建中的“未捕获的 ReferenceError:未定义导出”
- javascript - 从 html 调用模态
- python - while liste[i] != " ": 是列表索引问题
- excel - IF 配方,90 天内状态
- ruby-on-rails - 是什么导致 nil:NilClass 的未定义方法“map”?
- angular - Angular ng 服务命令
- android - 来自同一应用程序的 Firebase (FCM) 分组通知点击
- javascript - 我们可以从 Web 应用程序的前端进行缩小吗?
- eclipse - Eclipse 和 Visual Studio Code 中的量角器自动内容问题
- python - cx_Freeze 的熊猫分析问题