Я передаю конечную точку REST API как переменную env во время сборки докера nginx, и, потратив 6 часов на то, чтобы попробовать большинство предложений, у меня не хватило сил / терпения попробовать.
nginx conf, что яподставляю:
location /my-api/ {
proxy_pass ${api_url}/;
}
Я передаю это значение во время сборки докера:
#base_url comes from system env
docker build --build-arg base_api_url=$base_url
Я получаю это значение в моем Dockerfile:
ARG base_api_url
ENV api_url=$base_api_url
# This prints the value
RUN echo "api_url= ${api_url}" .
COPY package.json /usr/src/app/package.json
RUN npm install
COPY . /usr/src/app
RUN npm run build
FROM nginx:1.15.8-alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
# this works
COPY nginx.conf /etc/nginx/nginx.conf.template
# Initially following code was building and deploying docker image and url was hard coded. it was working
# COPY nginx.conf /etc/nginx/conf.d/default.conf
# Below will start the image but no REST endpoint configured
# CMD ["nginx", "-g", "daemon off;"]
# To substitute the api url few of the many things I have tried.
# Non of the below, have been able to replace the env api_url with its value
# Actually I don't know -- since /etc/nginx/conf.d/default.conf is not replaced at all
# CMD /bin/bash -c "envsubst < nginx.conf > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
# CMD /bin/sh -c "envsubst < nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;' || cat /etc/nginx/nginx.conf"
# Last status
CMD envsubst < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'
/ etc/nginx/conf.d/default.conf должен заменить api_url:
location /my-api/ {
proxy_pass http://theApiURL;
}
Я также попытался специально передать переменную env, например:
CMD envsubst ${api_url} < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'
и варианты, например, с использованием tee
.
Любая помощь / направление для решения этой проблемы приветствуется.