Почему пользователь USER, объявленный в моем Dockerfile, не отражен в скрипте ENTRYPOINT? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь исправить некоторые тесты, которые мы выполняем на Jenkins с Docker, но сценарий, на который указывает ENTRYPOINT в моем Dockerfile, продолжает работать как root, хотя я установил USER в Dockerfile.Это прекрасно работает на моем локальном компьютере, но не при работе на нашем компьютере Jenkins.

Я попытался запустить su в моем сценарии точки входа, чтобы убедиться, что остальная часть сценария работает как правильный пользователь, ноони все еще запускаются как root.

Итак, мой Dockerfile выглядит следующим образом:

FROM python:3.6

RUN apt-get update && apt-get install -y gettext libgettextpo-dev

ARG DOCKER_UID # set to 2000 in docker-compose file
ARG ENV=prod
ENV ENV=${ENV}
ARG WORKERS=2
ENV WORKERS=${WORKERS}

RUN useradd -u ${DOCKER_UID} -ms /bin/bash app
RUN chmod -R 777 /home/app

ENV PYTHONUNBUFFERED 1
ADD . /code
WORKDIR /code
RUN chown -R app:app /code
RUN mkdir /platform
RUN chown -R app:app /platform
RUN pip install --upgrade pip

RUN whoami # outputs `root`
USER app
RUN whoami # outputs `app`

RUN .docker/deploy/install_requirements.sh $ENV # runs as `app`

EXPOSE 8000

ENTRYPOINT [".docker/deploy/start.sh", "$ENV"]

, а мой start.sh выглядит так:

#!/bin/bash

ENV=$1

echo "USER"
echo `whoami`

echo Running migrations...
python manage.py migrate

mkdir -p static
chmod -R 0755 static


cd /code/

if [ "$ENV" == "performance-dev" ];
then
    /home/app/.local/bin/uwsgi --ini .docker/deploy/uwsgi.ini -p 4 --uid app
else
    /home/app/.local/bin/uwsgi --ini .docker/deploy/uwsgi.ini --uid app
fi

но

echo "USER"
echo `whoami`

выводит:

USER
root

, что приводит к сбою команд позже в скрипте, так как они неправильный пользователь.

Я бы исключил вывод как

USER
app

и я понимаю, что эта проблема обычно решается путем установки команды USER в Dockerfile, но я делаю это, и похоже, что он переключает пользователя при запуске самого Dockerfile.

Редактировать

Проблема была с моей конфигурацией docker-compose.Моя конфигурация docker-compose выглядит так:

version: '3'

services:
  service:
    user: "${DOCKER_UID}:${DOCKER_UID}"
    build:
      context: .
      dockerfile: .docker/Dockerfile
      args:
        - ENV=prod
        - DOCKER_UID=2000

DOCKER_UID - это переменная, установленная на моем локальном компьютере, но не на коробке Jenkins, поэтому я установил ее на 2000 в файле переопределения

1 Ответ

0 голосов
/ 30 мая 2019

Проблема, с которой я столкнулся, как отметил Дэвид Мэйз в комментариях, заключалась в том, что я настраивал пользователя при фактическом создании контейнера с помощью файла docker-compose. Я установил для параметра user значение ${DOCKER_UID}, которое на самом деле никогда нигде не было установлено, поэтому по умолчанию использовалась пустая строка. Установка 2000 исправила мою проблему.

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