ruby-on-rails 无法连接到本地主机上的Rails Docker容器

ev7lccsx  于 2023-01-22  发布在  Ruby
关注(0)|答案(2)|浏览(177)

我在从本地机器访问容器化的rails应用程序时遇到了麻烦,我将this快速入门指南作为模板,并对gemfile和gemfile. lock的路径做了一些调整,快速入门指南转到了docker-compose,但我想尝试在没有它的情况下访问应用程序,以便在继续之前熟悉这些过程。
这是我的dockerfile:

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler -v 2.0.1
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000:3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

这是一个入口点文件

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

我能够成功地构建和运行映像,但当我尝试访问0.0.0.0:3000时,我收到无法连接错误。x1c 0d1x
我还附上了我的应用程序目录结构的截图,Dockerfile和入口点在根目录下。
有一件事看起来很奇怪,当我试图运行容器的日志时,我没有得到任何输出,但当我关闭容器时,我看到了启动日志。不知道这是为什么。
我正在运行Docker桌面2.1.0.3。任何想法/帮助都非常感谢。

92dk7w1h

92dk7w1h1#

使用仅仅EXPOSE 3000在dockerfile.运行容器ror与Map端口到本地主机从你的新docker图像<image>

docker run -d --name ror -p 3000:3000 <image>

现在您应该能够访问localhost:3000

zdwk9cvp

zdwk9cvp2#

下面是我的一个成功的例子:
1.普通的文件夹,没什么特别的。
1.然后,在docker-composite.yml中添加环境变量,或将DATABASE_URL放入.env文件(重要的一点是使用主机.docker.internal而不是localhost
1.然后在database.yml中,使用ENV键指定url
然后通过运行docker-composition up启动容器

停靠文件

FROM ruby:3.0.5-alpine

RUN apk add --update --no-cache \
      bash \
      build-base \
      tzdata \
      postgresql-dev \
      yarn \
      git \
      curl \
      wget \
      gcompat

COPY Gemfile Gemfile.lock ./
WORKDIR /app

RUN curl -sL https://deb.nodesource.com/setup_14.x | bash 
RUN gem install bundler:2.4.3
RUN bundle lock --add-platform x86_64-linux
RUN bundle install

COPY package.json yarn.lock ./

RUN yarn install

COPY . .

EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0", "--pid=/tmp/server.pid"]

停靠-编写.yml

version: "3.9"
  services:
    app:
      image: your_app_name
      volumes:
        - /app
      env_file:
        - .env
      environment:
        - DATABASE_URL=postgresql://postgres@host.docker.internal:5432/<your_db_name>
      ports:
      - "3000:3000"

    webpack_dev_server:
      build: .
      command: bin/webpack-dev-server
      ports:
        - "3035:3035"
      volumes:
        - /app
      env_file:
        - .env
      environment:
        - WEBPACKER_DEV_SERVER_HOST=0.0.0.0

    redis:
      image: redis

数据库.yml

development:
  <<: *default
  database: giglifepro_development
  url: <%= ENV.fetch('DATABASE_URL') %>

相关问题