Мое приложение rails работает нормально, если я установил в конфигурации Docker целевой порт 3000. Но я не могу запустить его на порту 80. Это Dockerfile, который создает веб-сервис:
FROM ruby:2.3.7
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN apt-get install -y postgresql postgresql-contrib
RUN mkdir /app
WORKDIR /app
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . .
RUN cp config/database.docker-dev.yml config/database.yml
CMD [ "bundle", "exec", "rails", "s", "-p", "3000", "-b" "0.0.0.0" ]
И это docker-compose.yml:
version: '3'
services:
memcached:
image: memcached:1.5.2-alpine
restart: always
ports:
- "11211:11211"
postgres:
image: postgres:9.4-alpine
restart: always
volumes:
- ~/.engine-data/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
- POSTGRES_DB=app_development
- POSTGRES_USER=default
- POSTGRES_PASSWORD=secret
redis:
image: redis:3.2.0-alpine
restart: always
volumes:
- ~/.engine-data/redis:/data
ports:
- "6379:6379"
web:
build:
context: .
dockerfile: "Dockerfile-dev"
command: ./wait-for-it.sh redis:6379 -- ./wait-for-it.sh postgres:5432 -- bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/opt/apps/engine
depends_on:
- memcached
- redis
- postgres
ports:
- "80:3000"
env_file:
- .env
sidekiq:
build:
context: .
dockerfile: "Dockerfile-dev"
command: ./wait-for-it.sh redis:6379 -- ./wait-for-it.sh postgres:5432 -- bundle exec sidekiq
volumes:
- .:/opt/apps/engine
depends_on:
- web
- postgres
- redis
env_file:
- .env
elastic:
image: elasticsearch:1.5
volumes:
- ~/.engine-data/elasticsearch:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
Я попытался изменить команду rails s
на использование порта 80 и затем привязать 80:80 в веб-сервисе на docker-compose, но получил тот же результат: сервер работает, но ПОЛУЧИТЕ localhost: 80 не достигнет его.