Докер запускает проблему $ PATH с помощью мини-куба / kubernetes - PullRequest
0 голосов
/ 22 мая 2018

Я пытался заставить один из моих контейнеров работать локально с помощью minikube [я все еще новичок во всех этих FYI].До создания контейнера я запускал eval $ (minikube docker-env) и вижу «новый» контейнер в списке при запуске образов докера.

Вот мой файл 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/*

Затем я создал этот файл yml для мини-куба и в конце включил команду запуска Docker для передачи некоторых переменных 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"]

Когда я пытаюсь развернуть модуль, он оказывается в состоянии

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 локально, без мини-куба, в миксе нет проблем.Почему миникуб / К8 относятся к этому по-другому?

Я знаю, что это много информации.Большое спасибо за уделенное время.

1 Ответ

0 голосов
/ 22 мая 2018

Эта строка не является правильной:

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

В этом разделе command в вашем yaml вы можете переопределить строку CMD из вашего файла Docker,но это необязательно.Обычно вы не хотите этого делать.В вашем случае вы пытаетесь запустить docker run внутри вашего контейнера, и вы видите ошибку, которая говорит о том, что он не может найти команду docker на вашем $PATH на изображении.

ТакжеХорошей практикой является использование CMD pytest $TEST или ENTRYPOINT в качестве последней строки в вашем файле Docker.Для начала вы можете использовать несколько линтеров для dockerfiles, например this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...