我正在尝试配置一个rails应用程序以使用docker-compose进行本地开发。当我尝试在浏览器中访问它时没有得到响应,我得到了DNS_PROBE_FINISHED_NXDOMAIN
。
停靠-撰写.yml
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
restart: always
ports:
- "3000:3000"
volumes:
- .:/app
- gem_cache:/usr/local/bundle/gems
- node_modules:/app/node_modules
- web_logs:/app/log
env_file: .env
environment:
- RAILS_ENV=development
depends_on:
- database
- redis
database:
image: postgres:14-bullseye
restart: always
ports:
- 5432:5432
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: integral_development
redis:
image: redis:6.2
volumes:
postgres_data:
gem_cache:
node_modules:
web_logs:
停靠文件
FROM ruby:3.1.2-slim-buster
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs \
postgresql-client \
yarn
# Bundle install
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle check || bundle install
# Yarn install
# COPY package.json yarn.lock ./
# RUN yarn install
# Copy the main application.
COPY . ./
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]
第1001章:我的docker-entrypoint.sh
#!/bin/sh
set -e
if [ -f tmp/pids/server.pid ]; then
rm tmp/pids/server.pid
fi
bundle exec foreman start -f Procfile
过程文件
web: bundle exec puma -C config/puma.rb -p 3000
worker: bundle exec rake jobs:work
1条答案
按热度按时间6l7fqoea1#
如果你把
docker exec
放到容器里,你能做一个curl http://localhost:3000
并从应用程序中获取html吗?如果这样做有效,很可能你的应用只接受来自localhost的连接。请记住,容器内的localhost与容器外的localhost是不同的。
你需要告诉应用程序它应该绑定到
0.0.0.0
,这样它就可以允许来自任何地方的连接。我从来没有部署过ruby应用程序或使用过puma,但根据github的自述文件,我认为将bundle exec
命令更新为bundle exec puma -C config/puma.rb -b tcp://0.0.0.0:3000
应该可以做到这一点。