Доступ к приложению Rails, которое запускается в док-контейнере и прослушивает порт, отличный от 3000 - PullRequest
0 голосов
/ 16 марта 2019

Я хочу запустить приложение Rails в контейнере Docker и получить к нему доступ из браузера с помощью localhost:3000, в то время как приложение Rails, работающее в контейнере, прослушивает порт 3001.

Среда

  • ОС: Ubuntu 18.04
  • Версия Docker: 18.09.3, сборка 774a1f4

Я делаю следующее.

1) Создаю докерсоставьте файл и соберите его.

FROM ruby:2.6.1-slim
LABEL maintainer = "Foo Bar foo@bar.com"

RUN apt-get update
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get install -y --no-install-recommends apt-utils
# Install necessary tools
RUN apt-get install -y vim && \
    apt-get install -y git && \
    apt-get install -y curl && \
    apt-get install -y nodejs && \
    apt-get install -y bash-completion && \
    apt-get install -y build-essential patch ruby-dev zlib1g-dev liblzma-dev && \
    apt-get install -y libsqlite3-dev

RUN gem install bundler
RUN gem install nokogiri
RUN gem install rails
RUN mkdir -p /projects
WORKDIR /projects

2) Я создаю контейнер, запустив docker run -it --rm -p 3000:3001 -v /path/to/my/projects:/projects rails /bin/bash

docker ps и выдает следующее:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
2a8e30016a87        rails               "/bin/bash"         4 minutes ago       Up 4 minutes        0.0.0.0:3000->3001/tcp   serene_turing 

3)В моем контейнере из папки приложения Rails я запускаю bundle && rails s -p 3001 и получаю

=> Booting Puma
=> Rails 5.2.2.1 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.6.1-p33), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3001
Use Ctrl-C to stop

Когда я ввожу localhost:3000 в браузере, я получаю

This site can’t be reached The connection was reset.
Try:
   * Checking the connection
   * Checking the proxy and the firewall
ERR_CONNECTION_RESET

Есть идеи, что не так?

Кстати, с

docker run -it --rm -p 3000:3000 -v /path/to/my/projects:/projects rails /bin/bash

и

bundle && rails s

все отлично работает.

1 Ответ

1 голос
/ 16 марта 2019

Вы получаете сброс соединения с localhost:3000, потому что сервер Puma привязан к 127.0.0.1 внутри самого контейнера, как и в журнале:

* Environment: development
* Listening on tcp://localhost:3001

Так что вам нужно разрешить его с любого интерфейсачто означает, что он должен слушать 0.0.0.0, чтобы вы могли получить к нему внешний доступ.Попробуйте изменить команду rails s на следующую:

rails s -b 0.0.0.0 -p 3001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...