Переменная среды из нескольких слов в Dockerfile - PullRequest
0 голосов
/ 18 января 2020

У меня есть очень простое приложение Node.js, которое принимает местоположение в качестве аргумента командной строки (const location = process.argv[2];) и записывает погоду этого местоположения на консоль. Я пытаюсь запустить его в docker контейнере, просто чтобы попрактиковаться с docker.

Вот файл Docker:

FROM node:10

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

ENV location=San\ Diego

CMD ["sh", "-c", "node app.js ${location}"]

Проблема в том, что я не могу передать переменную окружения, содержащую более одного слова. Например, San Diego запускается как San. Это относится как к переменной окружения по умолчанию в Dockerfile, так и к любым переменным среды, которые я передаю при запуске образа.

Как я могу сделать так, чтобы я мог передать что-то вроде Los Angeles и получить приложение извлекает данные для Лос-Анджелеса как для переменной ENV в Dockerfile, так и для любой переменной среды, переданной в качестве аргумента при запуске образа?

1 Ответ

0 голосов
/ 18 января 2020

В вашей командной оболочке:

ENV location=San\ Diego
CMD ["sh", "-c", "node app.js ${location}"]

Вы не заключаете в кавычки расширение переменной, поэтому в конечном итоге оно запускает

sh -c 'node app.js San Diego'

, которое расширяется до двух слов. Вы должны указать это в своей команде. (И наоборот, вы можете попросить Docker предоставить вам упаковку sh -c.)

ENV location=San\ Diego
CMD node app.js "$location"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...