#docker #selenium #nginx #dockerfile #docker-machine
#docker #selenium #nginx #dockerfile #докер-машина
Вопрос:
Я использую многоступенчатую в docker для выполнения тестовых задач. Базовым образом является Selenium, который предоставляет порт 4444, а промежуточным образом является nginx для других операций.
В nginx открыт порт 80. Если мне нужно предоставить доступ к обоим портам, будет доступен только порт80, а не 4444 при использовании
docker run -p 80:80 -p 4444:4444 someimage:2
Dockerfile:
FROM selenium/standalone-firefox AS base
RUN python3 try.py
FROM nginx:alpine
COPY --from=base /report.html /usr/share/nginx/html
Ответ №1:
Вы неправильно понимаете, как работает многоступенчатая сборка.
Ваш конечный образ НЕ содержит все из каждого изображения, указанного вами в вашем Dockerfile.
Он ДЕЙСТВИТЕЛЬНО содержит все из изображения, указанного в последней FROM
инструкции, и результаты всех приведенных ниже команд.
В вашем случае он содержит все из изображения nginx: последнюю версию и файл report.html скопировано с предыдущего этапа сборки — это означает, что когда вы используете его для запуска контейнера, на порту 4444 ничего не прослушивается, поэтому раскрывать его бессмысленно.
Комментарии:
1. Есть ли какой-либо другой способ добиться этого? В качестве обходного пути я установил nginx и настроил несколько портов
2. Вы можете создать пользовательский образ, содержащий как Selenium, так и nginx. Кроме этого — нет, нет способа объединить несколько образов Docker.