ruby-on-rails 无法连接到Docker容器开发计算机

ssgvzors  于 2022-11-26  发布在  Ruby
关注(0)|答案(1)|浏览(169)

我正在尝试配置一个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
6l7fqoea

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应该可以做到这一点。

相关问题