Так что после некоторой борьбы с этим вопросом мне удалось заставить его работать аналогично ответу, предоставленному беллакном.Я опубликую свое точное решение здесь, на случай, если кому-то еще понадобится ссылка на полное решение.
Шаг 1: Напишите свой nginx.conf или default.conf, как вы обычно это пишете.Сохраните файл как «nginx.conf.template» или «default.conf.template» в зависимости от того, в какую переменную вы пытаетесь подставить переменные.
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream api-upstream {
server 192.168.25.254;
}
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile off;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Шаг 2: подставьте переменную в формате $ {VARNAME} для любых значений, которые вы хотите заменить на переменную окружения:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream api-upstream {
server ${SERVER_NAME};
}
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile off;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Шаг 3: Скопируйте ваши файлы конфигурации nginx (ваш nginx.conf.template или значение по умолчанию).conf.template) в ваш контейнер в соответствующем месте:
# build stage
FROM node:latest
WORKDIR /app
COPY ./ /app
RUN npm install
RUN npm run build
# production stage
FROM nginx:1.17.0-perl
COPY --from=0 /app/dist /usr/share/nginx/html
RUN apt-get update && apt-get install -y gettext-base
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/nginx.conf
#-----------------------------------#
|COPY default.conf /etc/nginx/conf.d|
|COPY nginx.conf.template /etc/nginx|
#-----------------------------------#
RUN mkdir /certs
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
Шаг 4. Установите переменную окружения в файле docker-compos.yml, используя метку раздела «environment».Убедитесь, что имя вашей переменной окружения совпадает с тем, которое вы выбрали в конфигурационном файле nginx.Используйте команду "envsubt" в вашем контейнере Docker, чтобы подставить значения переменных в ваши переменные в вашем nginx.conf.template, и записать вывод в файл с именем nginx.conf в правильном месте.Это можно сделать в файле docker-compose.yml, используя метку раздела «command»:
version: '2.0'
services:
front-end:
environment:
- SERVER_NAME=172.31.67.100:9100
build: http://git-account:git-password@git-server.com/project-group/repository-name.git#branch-ame
container_name: qa_front_end
image: qa-front-end-vue
restart: always
networks:
qa_network:
ipv4_address: 172.28.0.215
ports:
- "9080:80"
command: >
/bin/sh -c
"envsubst '
$${SERVER_NAME}
'< /etc/nginx/nginx.conf.template
> /etc/nginx/nginx.conf
&& nginx -g 'daemon off;'"
Шаг 5. Запустите свой стек с помощью docker-compose up (с любыми дополнительными переключателями, которые вам нужны) иТеперь ваш сервер nginx должен начинаться с любого значения, которое вы указали в разделе «environment» вашего docker-compose.yml
Как упоминалось в приведенном выше решении, вы также можете определить собственную точку входа, однако это решение имееттакже хорошо работает и хранит все содержимое в одном файле конфигурации, что дает мне возможность запускать стек сервисов напрямую из git без единого файла docker-compose.yml.
Большое спасибоВы всем, кто нашел время, чтобы подготовиться к этому, и беллак, что нашли время помочь мне решить проблему.