Вы имеете 2 различных контекста при работе с docker образом: build context (docker build build) и run context (docker run command).
Из ссылка на файл Docker :
Инструкция ENV устанавливает значение переменной среды в значение. Это значение будет присутствовать в среде для всех последующих инструкций на этапе сборки и может быть также заменено во многих встроенных.
Инструкция ARG определяет переменную, которую пользователи могут передавать во время сборки разработчику с docker команда построения с использованием флага --build-arg =. Если пользователь указывает аргумент сборки, который не был определен в Dockerfile, сборка выдает предупреждение.
Похоже, вам нужен способ изменения переменных, используемых в Dockerfile, для изменения ваших команд sed. Для этого вы должны использовать аргументы, и вы можете комбинировать их с переменными среды, чтобы сделать их доступными во время выполнения (docker команда запуска)
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
ARG PROXY_PASS=http://localhost:3000
ARG SERVER_NAME=myserver.com
ARG PEM_PATH=/etc/nginx/certs/cert.pem
ARG KEY_PATH=/etc/nginx/certs/cert.key
ENV PROXY_PASS ${PROXY_PASS}
ENV SERVER_NAME ${SERVER_NAME}
ENV PEM_PATH ${PEM_PATH}
ENV KEY_PATH ${KEY_PATH}
WORKDIR /etc/nginx
RUN rm -f sites-enabled/default
ADD ./sites-available/ssl /etc/nginx/sites-available/ssl
RUN sed -ri 's@PROXY_PASS@${PROXY_PASS}@' sites-available/ssl
RUN sed -ri 's@SERVER_NAME@${SERVER_NAME}@' sites-available/ssl
RUN sed -ri 's@PEM_PATH@${PEM_PATH}@' sites-available/ssl
RUN sed -ri 's@KEY_PATH@${KEY_PATH}@' sites-available/ssl
RUN cp -f sites-available/ssl sites-available/default
#RUN ln -s /etc/nginx/sites-available/ssl sites-enabled/default
EXPOSE 80 443
CMD ["nginx"]
И вы можете изменить значения аргументов при построении изображения :
$ docker build --build-arg SERVER_NAME=docker.havehad.kr .
Ваш аргумент ${SERVER_NAME}
будет заменен в инструкциях Dockerfile (ENV и RUN) на docker.havehad.kr
.
Если вам нужно изменить команды sed во время выполнения (docker run), поместите их в скрипт оболочки и используйте его как ENTRYPOINT