Как передать переменную окружения из docker-compose в проект? - PullRequest
0 голосов
/ 11 января 2019

Я использую репозиторий AWS ECS для образов докера.

Мой docker-compose.yml файл выглядит так:

version: "3"
services:
  my-front-end:
    image: myFrontEndImage:myTag
    links:
      - my-back-end
    ports:
      - "8080:8080"
    logging:
      driver: 'json-file'
      options:
        max-size: "50m"
  my-back-end:
    image: myBackEndImage:myTag
    ports:
      - "3000:3000"
    logging:
      driver: 'json-file'
      options:
        max-size: "50m"

И что мне нужно, чтобы можно было передать переменную окружения из файла docker-compose в мой образ docker.

Я пытался добавить строки для среды (следуя примеру ).

version: "3"
services:
  my-front-end:
    image: myFrontEndImage:myTag
    links:
      - my-back-end
    environment:
      - BACKEND_SERVER_PORT=3001
    ports:
      - "8080:8080"
    logging:
      driver: 'json-file'
      options:
        max-size: "50m"
  my-back-end:
    image: myBackEndImage:myTag
    ports:
      - "3000:3000"
    logging:
      driver: 'json-file'
      options:
        max-size: "50m"

А затем в моем проекте (который является проектом VueJS) я пытаюсь получить к нему доступ process.env.BACKEND_SERVER_PORT. Но я не вижу своего значения и при попытке console.log(process.env); вижу, что оно имеет только значение {NODE_ENV: "development"}.

Итак, мой вопрос здесь, как передать переменную env из docker-compose в мой образ docker, чтобы я мог использовать ее внутри моего проекта?

Все в проекте работает нормально, я работаю над этим проектом долгое время, и файл docker-compose работает, просто сейчас, когда мне нужно добавить эту переменную среды, я не могу заставить ее работать.

РЕДАКТИРОВАТЬ: добавив еще несколько файлов, за запрос в комментарии.

.Dockerfile для my-front-end выглядит так:

FROM node:8.11.1
WORKDIR /app
COPY package*.json ./
RUN npm i npm@latest -g && \
    npm install
COPY . .
CMD ["npm", "start"]

Как уже упоминалось, это VueJS приложение, а вот часть package.json, которая может вас заинтересовать:

"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  "start": "npm run dev",
  "build": "node build/build.js"
},

В то время как .Dockerfile для my-back-end выглядит так:

FROM node:8.11.1
WORKDIR /app/server
COPY package*.json ./
RUN npm i npm@latest -g && \
    npm install
COPY . .
CMD ["npm", "start"]

Мой бэкэнд на самом деле является приложением express.js, которое прослушивает отдельный порт, и приложение помещается в папку server под корнем проекта. Вот часть package.json, которая может вас заинтересовать:

"scripts": {
  "start": "nodemon src/app.js",
  "test": "echo \"Error: no test specified\" && exit 1"
},

1 Ответ

0 голосов
/ 11 января 2019

Я думаю, что вы все делаете правильно с точки зрения настройки docker-compose. И кажется, что при передаче переменной окружения в приложение VueJS есть некоторые нюансы.

В соответствии с ответами на на этот вопрос вам нужно назвать переменные с помощью VUE_APP_*, чтобы иметь возможность получить их со стороны клиента

...