#docker #docker-compose #wsl-2
Вопрос:
Я создал файл docker и создал контейнер docker, используя этот файл. Но веб-приложение docker недоступно с хост-компьютера. Я использую WSL2 для запуска docker. Мой контейнер docker находится внутри моего дистрибутива ubuntu. Когда я запускаю контейнер, он говорит, что приложение запущено. Но когда я попытался получить доступ к веб-серверу из chrome на моем компьютере с Windows (хосте), он говорит, что не удалось подключиться. Мое отображение портов выглядит нормально.
Вот мой файл docker-compose.yml
version: '2'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: dp
MYSQL_USER: app
MYSQL_PASSWORD: appuser
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
ports:
- "3307:3306"
volumes:
- "./db_dump:/docker-entrypoint-initdb.d/:ro"
container_name: mysql_db
app:
build:
context:
./
volumes:
- "./dp:/app"
ports:
- "3000:3000"
depends_on:
- db
links:
- db
environment:
MYSQL_HOST: db
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: dp
MYSQL_USER: app
MYSQL_PASSWORD: appuser
container_name: dp_app
Вот мой док-файл
FROM node:14.15.5-alpine3.13
RUN mkdir -p /app
WORKDIR /app
#RUN adduser -S app
COPY ./dp/ .
RUN npm install
RUN npm install sharp --ignore-scripts=false
#RUN chown -R app /app
#USER app
EXPOSE 3000
CMD [ "npm", "run", "deploy" ]
У меня в корневом каталоге есть папка с именем dp, которая является следующим приложением js. Также у меня есть папка под названием db_dump, в которой есть мои начальные сценарии бд для настройки базы данных.
Вот сценарии в файле package.json в папке dp
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"deploy": "next build amp;amp; next start"
}
Когда я запускаю docker-compose up
, создается изображение, создается следующее приложение и запускается с сообщением
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
Поскольку я привязал 3000 портов контейнера к 3000 портам моей хост-машины, я должен иметь доступ к веб-серверу с локального хоста:3000, верно? Но я не могу получить к нему доступ. Я даже попытался получить ip-адрес контейнера docker docker inspect
, но это тоже не сработало. Я попытался подключить сервер mysql с помощью порта 3307, который также не работает. Кажется, ошибки нет. Но не смог подключиться.
Я попробовал curl -I http://localhost:3000
из другого экземпляра wsl, он показывает 200 ответов. Но когда я пытаюсь сделать то же самое из командной строки Windows, это не работает. Не в состоянии понять, в чем проблема.
Комментарии:
1. В
package.json
настройках вашей"deploy": "next build amp;amp; next start"
попытки"deploy": "next build amp;amp; next start -p 3000"
. 3000 на самом деле является портом разработки, вы не должны использовать его для prod2. @Superbman, я изменил сценарий, как ты и предлагал. Но все равно не работает.
3. Просто чтобы уточнить, вы делаете
docker-compose up
это из Windows или из Ubuntu (WSL)?4. Я работаю
docker-compose up
с Ubuntu WSL.
Ответ №1:
Если вы используете Docker-машину на Mac или Windows, используйте ip-адрес docker-машины MACHINE_VM, чтобы получить IP-адрес вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере.
Попробуйте это, это должно сработать.