Запускать сценарий bash перед запуском экземпляра React в Docker? - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь запустить bash-скрипт в докер-контейнере при инициализации, когда контейнер запускается до запуска приложения CRA. Этот сценарий bash копирует переменную среды GCP_PROJECT_ID в файл .env, как определено в файле docker-entrypoint.sh. Я попытался использовать Entrypoint для запуска файла, но он не работает.

Dockerfile

FROM node:9-alpine

RUN npm install yarn

WORKDIR /usr/app

COPY ./yarn.lock /usr/app
COPY ./package.json /usr/app

RUN yarn install

COPY . /usr/app/

RUN yarn build

FROM node:9-alpine
WORKDIR /usr/app

COPY --from=0 /usr/app/build /usr/app/build
COPY --from=0 /usr/app/package.json /usr/app/package.json
COPY .env /usr/app/.env
COPY docker-entrypoint.sh /usr/app/docker-entrypoint.sh
RUN chmod +x /usr/app/docker-entrypoint.sh

RUN yarn global add serve

RUN npm prune --production
ARG GCP_PROJECT_ID=xxxxx # SAMPLE ENVIRONMENT VARIABLES
ENV GCP_PROJECT_ID=$GCP_PROJECT_ID

ENTRYPOINT [ "/usr/app/docker-entrypoint.sh" ]
CMD [ "serve", "build" ]

docker-entrypoint.sh

#!/bin/sh
printf "\n" >> /usr/app/.env
printf "REACT_APP_GCP_PROJECT_ID=$GCP_PROJECT_ID" >> /usr/app/.env

Я могу проверить, что переменные среды существуют, т. Е. Работает docker run -it --entrypoint sh <IMAGE NAME> и echo $GCP_PROJECT_ID печатает xxxxx.

Как запустить скрипт bash перед запускоммое приложение CRA в докере?

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Сценарий ENTRYPOINT получает CMD в качестве аргументов. Вам нужно включить строку, чтобы сказать ей, чтобы она действительно выполняла команду, обычно exec "$@".

#!/bin/sh
if [ -n "$GCP_PROJECT_ID" ]; then
  echo "REACT_APP_GCP_PROJECT_ID=$GCP_PROJECT_ID" >> /usr/app/.env
fi
exec "$@"

Если вы используете этот шаблон, вам не нужно --entrypoint

sudo docker run -e GCP_PROJECT_ID=... imagename cat /usr/app/.env
# should include the REACT_APP_GCP_PROJECT_ID line

В зависимости от того, что еще находится в файле, достаточно использовать docker run -v, чтобы ввести файл конфигурации оптом, вместо того, чтобы пытаться создать его во время запуска.

sudo docker run -v $PWD/dot-env:/usr/app/.env imagename
0 голосов
/ 07 октября 2019

Вы можете использовать && в CMD в Dockerfile

CMD sh /usr/app/docker-entrypoint.sh && serve build

или ввести команду serve build в ваш скрипт

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