![](/img/trans.png)
[英]could not connect to server: Connection refused Is the server running on host “database” (172.19.0.3) and accepting TCP/IP connections on port 5432?
[英]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
端口映射。
我應該補充一點,您的撰寫文件正在發布(端口映射) db
和redis
服務; 發布它們意味着它們可以在主機的 .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.