簡體   English   中英

Docker:端口 5342 上的 TCP/IP 連接? 連接到服務器:連接被拒絕服務器是否在主機上運行

[英]Docker: TCP/IP connections on port 5342? connect to server: Connection refused Is the server running on host

我在 rails 7 中使用 rails 3.0.0。

我的 dockerfile 是:

FROM ruby:3.0.0-alpine

RUN apk add --update --virtual \
    runtime-deps \
    postgresql-client\
    build-base \
    libxml2-dev \
    libxslt-dev \
    yarn \
    libffi-dev \
    readline \
    build-base \
    postgresql-dev \
    libc-dev \
    linux-headers \
    readline-dev \
    file \
    imagemagick \
    git \
    tzdata \
    && rm -rf /var/cache/apk*

WORKDIR /app
COPY . /app/
ENV BUNDLE_PATH /gems
RUN yarn install
RUN bundle install

ENTRYPOINT ["bin/rails"]
CMD ["s", "-b", "0.0.0.0"]

EXPOSE 3000

docker-compose.yml 為:

version: '3.8'
services:
  db:
    image: postgres:latest
    environment:
      - POSTGRES_PASSWORD=password
    ports:
      - "5433:5432"
    volumes:
      - "dbdata:/var/lib/postgresql/data"

  redis:
    image: redis:latest
    ports:
      - "6380:6379"

  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5433/postgres
      - REDIS_URL=redis://redis:6380
    volumes:
      - .:/app

volumes:
  dbdata:

database.yml 文件如下:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  port: 5432

development:
  <<: *default
  database: my_app_development
  username: postgres
  password: password

test:
  <<: *default
  database: my_app_test

#   production:
#     url: <%= ENV["MY_APP_DATABASE_URL"] %>

production:
  <<: *default
  database: my_app_production
  username: my_app
  password: <%= ENV["MY_APP_DATABASE_PASSWORD"] %>

使用 ubunut 20.04 LTS。 出現以下錯誤:ActiveRecord::ConnectionNotEstablished 無法連接到服務器:連接被拒絕服務器是否在主機“172.22.0.3”上運行並在端口 5433 上接受 TCP/IP 連接?

如何解決此問題,任何建議都會有所幫助,在此先感謝。

您的web服務正在使用內部 docker.network 與db (postgresql) 服務連接; 這樣做時,它直接連接到容器的 IP 地址,該地址(對於 postgresql)正在偵聽端口5432 通過 docker.network 的連接不需要發布/公開端口,因此不使用5433:5432端口映射。

我應該補充一點,您的撰寫文件正在發布(端口映射) dbredis服務; 發布它們意味着它們可以在主機的 .network 接口上公開訪問(如果您不在 internal.network 上,則可以在 inte.net 上公開訪問)。

確保為必須可公開訪問(或通過其他方式受到保護)的服務發布端口; 如上所述,容器/服務之間的連接不需要發布這些端口。

從上述共享建議中得出解決方案:

docker-compose.yml

 version: '3.8'
    services:
      db:
        image: postgres:latest
        environment:
          POSTGRES_PASSWORD: password
          command: -p 5000
          ports: "5000:5432"
        volumes:
          - "dbdata:/var/lib/postgresql/data"
    
      redis:
        image: redis:latest
        ports:
          - "6380:6379"
    
      web:
        build: .
        ports:
          - "3000:3000"
        depends_on:
          - db
          - redis
        environment:
          - DATABASE_URL=postgres://postgres:password@db:5432/postgres
          - REDIS_URL=redis://redis:6379
        volumes:
          - .:/app
    
    volumes:
      dbdata:

數據庫.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: my_app_development
  username: postgres
  password: password

test:
  <<: *default
  database: my_app_test

#   production:
#     url: <%= ENV["MY_APP_DATABASE_URL"] %>

production:
  <<: *default
  database: my_app_production
  username: my_app
  password: <%= ENV["MY_APP_DATABASE_PASSWORD"] %>

Dockerfile:

FROM ruby:3.0.0-alpine

RUN apk add --update --virtual \
    runtime-deps \
    postgresql-client\
    build-base \
    libxml2-dev \
    libxslt-dev \
    yarn \
    libffi-dev \
    readline \
    build-base \
    postgresql-dev \
    libc-dev \
    linux-headers \
    readline-dev \
    file \
    imagemagick \
    git \
    tzdata \
    && rm -rf /var/cache/apk*

WORKDIR /app
COPY . /app/
ENV BUNDLE_PATH /gems
RUN yarn install
RUN bundle install

ENTRYPOINT ["bin/rails"]
CMD ["s", "-b", "0.0.0.0"]

EXPOSE 3000

現在有了這些配置,rails 應用程序正在運行。 請更新如何做得更好,謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM