#node.js #docker #dockerfile
Вопрос:
Я создаю приложение узла в Docker. Это мой док-файл:
FROM docker.artifacts.smit.sise/node:12.19.1
COPY . .
RUN mkdir certs
amp;amp; cd /certs
amp;amp; wget https://artifacts.smit.sise/artifactory/smit-certs-public/smit_ca.pem --no-check-certificate
amp;amp; npm config set cafile /certs/smit_ca.pem
amp;amp; npm config set registry https://artifacts.smit.sise/api/npm/npm
RUN mkdir /common_front/build/static
amp;amp; ln -sf /front/build/assets/* /valisveeb_common_front/build/assets
amp;amp; ln -sf /front/build/static/* /valisveeb_common_front/build/static
amp;amp; ln -sf /front/build/generate.options.js/
amp;amp; ln -sf /front/build/settings.json /valisveeb_common_front/build/settings.json
#RUN cp -f envexample build/.env
WORKDIR /front/build
RUN ls -la
amp;amp; npm install
RUN npm run dev
EXPOSE 3000
Локально отлично работает с этими точными командами, но при выполнении файла Dockerfile в браузере ничего не отображается, хотя приложение говорит «прослушивание порта 3000».
Вот что я вижу:
https://i.stack.imgur.com/TwCqB.png
РЕДАКТИРОВАТЬ: Вот с чем я его запускаю:
docker build . amp;amp; docker run -d --restart=always -p 3000:3000 . -it --ignore-certificate-errors
Комментарии:
1.
when executing the Dockerfile, nothing appears on browser
. Похоже, здесь есть небольшое недоразумение. Вы «выполняете» файл Docker для создания образа docker. Как только этот образ будет создан, вы запустите один или несколько контейнеров(ов), используя этот образ. Эти контейнеры запускаются либо с помощью команды по умолчанию, либо в зависимости от того, что вы передаете во время выполнения. Имея это в виду, я подозреваю, что предпоследняя строка вашего файла Dockerfile должна бытьCMD npm run dev
(для запуска службы при запуске контейнера, а не во время сборки). И вы также должны сообщить нам, какую команду вы используете для запуска своего контейнера.2.
localhost
=127.0.0.1
. Вы должны запуститьipconfig
вCMD
Windows и найти свой IP (обычно192.168
IP), а затем запустить, как192.168.43.56:3000
3. @Saeed Если контейнер и браузер находятся на одном хосте, то localhost отлично работает с переадресацией порта
4. @Zeitounator это то, что я запускаю с помощью сборки docker . amp;amp; запуск докера-d —перезапуск=всегда -p 3000:3000 . -это —игнорировать-сертификат-ошибки
5. Вы запускаете службу во
docker build
время выполнения команды, поэтому сборка образа никогда не заканчивается.docker run
до него даже не дотянулись.
Ответ №1:
Эта инструкция:
RUN npm run dev
запускает службу во время сборки образа, поэтому образ даже не создается, и контейнер не запускается при попытке подключиться к нему. Это должно быть:
ENTRYPOINT ["npm", "run", "dev"]