Я хочу запустить приложение 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
все отлично работает.