Как получить доступ к приложению rails внутри контейнера Docker
Я использую Dockerfile для создания Docker-контейнера для базового приложения rails blog. вот мой Dockerfile
FROM ruby:2.3
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app
COPY Gemfile* ./
RUN bundle install
COPY . .
EXPOSE 8000
CMD rails server -p 8000 -b 0.0.0.0
Затем я запустил эту команду для создания образа докера
docker build -t blog .
а вот как я запускал контейнер из докера
docker run -d -e POSTGRES_USER=$POSTGRES_USER -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD --net=blog --name app -v $PWD:/usr/src/app -p 8000:8000 blog
после доступа к логам из контейнера я получил это
docker logs app
=> Booting Puma
=> Rails 5.1.6.1 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.3.8-p459), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
После 2 часов поиска в Google я получил щелчок, что это конфликт в рельсах 5.1, которые запускаются tcp://0.0.0.0:3000
в рельсах. Поэтому я переключил свой сервер приложений с PUMA на WEBRICK. Теперь приложение Docker Logs сообщает:
docker logs app
[2018-12-06 12:30:10] INFO WEBrick 1.3.1
[2018-12-06 12:30:10] INFO ruby 2.3.8 (2018-10-18) [x86_64-linux]
[2018-12-06 12:30:10] INFO WEBrick::HTTPServer#start: pid=8 port=3000
но приложение все еще не доступно из Firefoix/ Chrom. Пожалуйста, руководство, если я делаю что-то не так. ТИА:)
1 ответ
Решение
Просто предложение от манжеты:
Пытаться:
docker run -d -e POSTGRES_USER=$POSTGRES_USER -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD --net=blog --name app -v $PWD:/usr/src/app -p 3000:3000 blog
Если вы можете решить это, возможно, следующее не применяется, как вы ожидаете.
EXPOSE 8000
CMD rails server -p 8000 -b 0.0.0.0