У меня небольшой проект с одним сервисом, который является API-интерфейсом rails :.Контейнер, удерживающий API-интерфейс rails, не работает так, как мне бы хотелось.
Вот мой docker-compose.yml
:
version: '3'
services:
mynab_api:
image: 'myname/my_api:latest'
ports:
- '3001:3001'
Вот Dockerfile
службы:
FROM ruby:2.5.3-alpine3.8
# Minimal requirements to run a Rails app
RUN apk add --no-cache --update build-base \
linux-headers \
git \
sqlite-dev \
nodejs \
tzdata
ENV APP_PATH /usr/src/app
# Different layer for gems installation
WORKDIR $APP_PATH
ADD Gemfile $APP_PATH
ADD Gemfile.lock $APP_PATH
RUN bundle install
# Copy the application into the container
COPY . $APP_PATH
CMD ["bundle", "exec", "rails", "server", "-p", "3001"]
Когда я запускаю $ docker-compose up
служба запускается и не падает.Если я запускаю $ docker-compose ps
служба работает.Проблема в том, что если я захожу в браузер на http://localhost:3001
, служба, кажется, не работает (хотя все еще работает).
Исправление, которое я обнаружил, состоит в замене команды по умолчанию в Dockerfile
(CMD ["bundle", "exec", "rails", "server", "-p", "3001"]) по
CMD ["bundle", "exec", "rails", "server"]
, который по умолчанию излучает порт 3000. Затем вdocker-compose.yml
Я сопоставляю порт 3001 на моей машине с портом 3000 в моем контейнере.
version: '3'
services:
mynab_api:
image: 'myname/my_api:latest'
ports:
- '3001:3000'
Эта работа найдена.Почему не работает первая версия?
Редактировать: Вот что telnet
дает
-> % telnet localhost 3001
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.