Невозможно подключиться к закрепленной службе Vue CLI с хоста - PullRequest
0 голосов
/ 18 июня 2019

У меня есть очень простой Dockerfile, который устанавливает Vue CLI и предоставляет порт 8080:

FROM node

RUN yarn global add @vue/cli

EXPOSE 8080

У меня есть docker-compose.yml, который соединяет порт хоста с открытым на контейнере:

version: '3'

services:
  vue:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - .:/home/node
    working_dir: '/home/node'
    ports:
      - '8080:8080'

Я запускаю контейнер с docker-compose run vue bash, затем создаю проект Vue с vue create foo.

В папке проекта я добавил vue.config.js:

module.exports = {
  devServer: {
    host: '0.0.0.0',
    port: 8080
  }
}

Когда я запускаю сервер разработки с yarn serve, я вижу:

 App running at:
  - Local:   http://localhost:8080/

  It seems you are running Vue CLI inside a container.
  Access the dev server via http://localhost:<your container's external mapped port>/

Хотя он показывает, что он размещен локально на localhost, а не 0.0.0.0, это выглядит как известная ошибка отображения .

Однако я не могу дозвониться до Vue через http://localhost:8080 с хост-компьютера.

Я просмотрел несколько руководств по настройке этогои я не могу понять, почему я не могу подключиться к серверу Vue dev.

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Я не осознавал, что docker-compose run не устанавливает порты, определенные в docker-compose.yml по умолчанию.Это может быть вызвано docker-compose run --service-ports.

. Я остановился на решении, в котором разделил выполнение команд vue cli и запуск сервера dev на отдельные службы:

version: '3'

services:
  vue-cli:
    build:
      context: .
      dockerfile: ./Dockerfile
    image: auscert/vue:latest
    volumes:
      - .:/home/node
    working_dir: '/home/node/demo'
    command: ['echo', 'Service vue-cli is run only']
  vue:
    image: auscert/vue:latest
    ports:
      - '8080:8080'
    volumes:
      - .:/home/node
    working_dir: '/home/node/demo'
    command: ['yarn', 'serve']

ЭтоПозвольте мне по-прежнему использовать docker-compose run vue-cli для разовых и легко получить оболочку, в то время как вся подача контента осуществляется выделенным сервисом.(Добавление echo в качестве command для службы vue-cli обеспечивает немедленную помощь docker-compose up.)

0 голосов
/ 18 июня 2019

Используйте docker-compose up вместо docker-compose run, который по умолчанию не открывает порты (как вы заметили)

В чем разница между up, run иstart?

Как правило, вы хотите составить Docker.Используйте up для запуска или перезапуска всех служб, определенных в docker-compose.yml.В стандартном «прикрепленном» режиме вы видите все журналы из всех контейнеров.В «отдельном» режиме (-d) Compose завершает работу после запуска контейнеров, но контейнеры продолжают работать в фоновом режиме.

Команда запуска docker-compose предназначена для запуска «one-off» или «adhoc»." задачи.Требуется имя службы, которую вы хотите запустить, и запускаются контейнеры только для служб, от которых зависит запущенная служба.Используйте команду run для запуска тестов или выполнения административных задач, таких как удаление или добавление данных в контейнер тома данных.Команда run действует как docker run -ti в том смысле, что она открывает интерактивный терминал для контейнера и возвращает состояние выхода, соответствующее состоянию выхода процесса в контейнере.

Команда запуска docker-compose полезна толькоперезапустить контейнеры, которые были ранее созданы, но были остановлены.Он никогда не создает новые контейнеры.

src: https://docs.docker.com/compose/faq/

...