bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Docker-compose build не видит переменных?

Здравствуйте. Подскажите пожалуйста. Почему-то при создании контейнера
docker-compose build
не видит переменную которая находится в файле .env
APP_HOME=/coins

Вот кусок docker-compose.yml где подключается файл
app:
    build: .
    command: >
      bash -c "
      bundle check
      || bundle install --clean
      && rm -f tmp/pids/server.pid
      && bundle exec rails db:migrate
      && bundle exec rails server"
    ports:
      - $PORT:$PORT
    volumes:
      - .:$APP_HOME
    environment:
      DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB?pool=$POSTGRES_POOL
      REDIS_PROVIDER: redis://:$REDIS_PASSWORD@$REDIS_HOST:$REDIS_PORT?db=$REDIS_DB
      BUNDLE_PATH: ${APP_HOME}/gems
    env_file:
      - .env
    depends_on:
      - db


файл Dockerfile
FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim

RUN mkdir $APP_HOME
WORKDIR $APP_HOME


А вот ошибка:
Building app
Step 1/4 : FROM ruby:2.5.1
 ---> 1624ebb80e3e
Step 2/4 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim
 ---> Using cache
 ---> a5d9b4e846ff
Step 3/4 : RUN mkdir $APP_HOME
 ---> Running in 0447e2436825
mkdir: missing operand
Try 'mkdir --help' for more information.
ERROR: Service 'app' failed to build: The command '/bin/sh -c mkdir $APP_HOME' returned a non-zero code:


5af5452c57a9f218998714.png

Можно конечно добавить переменную в Dockerfile, но как-то хотелось бы иметь переменные в одном файлике.
Спасибо.
  • Вопрос задан
  • 2156 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
Так и не должен видеть. Переменные из .env docker-compose вставляет только в docker-compose.yml
Чтобы передать их в билд, можно использовать вот это
https://docs.docker.com/compose/compose-file/#args

build:
  context: .
  args:
    APP_HOME: $APP_HOME


Но вообще не вижу смысла менять расположение папки с приложением. Это же изолированный контейнер. сделайте просто /app

А и еще вопрос, зачем вам nodejs внутри контейнера с ruby?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы