Докер прослушивает порт 3000, но в браузере ничего не отображается

#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"]