[英]Splitting up a Rails and React app into separate Docker containers?
[英]Localhost not found even if my docker containers are up?
總的來說,我對開發人員,尤其是 Docker 領域,尤其是 Rails 還比較陌生,如果這聽起來像是一個愚蠢的問題,請提前致歉。
在 Docker Compose 的幫助下,我試圖在由 4 個服務(2 個網站和 2 個 API)+ Postgresql 組成的 monorepo 中運行一個應用程序。 最終目標是使用 Traefik 在 VPS 上運行它(一旦我讓當前應用程序在本地運行)。
以下是不同的服務:
Postgres(通過 Dockerhub 中可用的 Postgres 圖像)
B2C 網站 (NextJS)
一個管理網站(React with create Vite)
API(Rails)。 它應該鏈接到 Postgres 數據庫
一個 Strapi API(用於 B2C 網站的內容)。 Strapi 有自己的 SQLite 數據庫。 只有 B2C 網站需要來自 Strapi 的數據。
當我運行docker compose up -d命令時,它似乎在工作(見下圖)
但是當我訪問其中一個網站時(除了似乎正常工作的 Strapi)(https://localhost:3009,或 3008 或 3001),我什么也得不到(見下文)。
但是,我沒有在任何應用程序的日志中看到任何錯誤。 例如下面的 Rails API 日志:
我假設我的配置有錯誤,尤其是在 Rails api 的 database.yml 配置和 docker-compose.yml 文件中。
數據庫.yml:
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: pg
development:
<<: *default
database: chana_api_v2_development
test:
<<: *default
database: chana_api_v2_test
production:
<<: *default
database: chana_api_v2_production
username: chana
password: <%= ENV["CHANA_DATABASE_PASSWORD"] %>
docker-compose.yml
version: '3'
services:
# ----------------POSTGRES -----------------
pg:
image: postgres:14.6
container_name: pg
networks:
- chana_postgres_network
ports:
- "5432:5432"
environment:
POSTGRES_DB: chana_development
POSTGRES_USER: chana
POSTGRES_PASSWORD: chana
volumes:
- ./data:/var/lib/postgresql/data
# ----------------- RAILS API -----------------
api:
build: ./api
container_name: api
networks:
- chana_postgres_network
- api_network
volumes:
- ./api:/chana_api
ports:
- "3001:3000"
depends_on:
- pg
# ----------------- STRAPI -----------------
strapi:
build:
context: ./strapi
args:
BASE_VERSION: latest
STRAPI_VERSION: 4.5.0
container_name: chana-strapi
restart: unless-stopped
env_file: .env
environment:
NODE_ENV: ${NODE_ENV}
HOST: ${HOST}
PORT: ${PORT}
volumes:
- ./strapi:/srv/app
- strapi_node_modules:/srv/app/node_modules
ports:
- "1337:1337"
# ----------------- B2C website -----------------
public-front:
build: ./public-front
container_name: public-front
restart: always
command: yarn dev
ports:
- "3009:3000"
networks:
- api_network
- chana_postgres_network
depends_on:
- api
- strapi
volumes:
- ./public-front:/app
- /app/node_modules
- /app/.next
# ----------------- ADMIN website -----------------
admin-front:
build: ./admin-front
container_name: admin-front
restart: always
command: yarn dev
ports:
- "3008:3000"
networks:
- api_network
- chana_postgres_network
depends_on:
- api
volumes:
- ./admin-front:/app
- /app/node_modules
- /app/.next
volumes:
strapi_node_modules:
networks:
api_network:
chana_postgres_network:
您知道為什么我在網站頁面上看不到任何內容嗎?
我嘗試更改相關的不同文件的代碼,尤其是 database.yml、docker-compose.yml 和每個應用程序的 dockerfiles。
此外,我嘗試使用命令docker exec -it api /bin/sh查看 api 容器 (Rails),以通過 Rails 控制台檢查數據庫,但我收到以下錯誤消息:
activeRecord::ConnectionNotEstablished 無法連接到服務器:沒有這樣的文件或目錄。 服務器是否在本地運行並接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的連接?
而不是 localhost 按 ctrl 並單擊它傳遞的 url 有時不會在您網站的 localhost 端口上打開
看起來你在 docker 中的主機通常是127.0.0.1:3000
這很好但是在 docker 中當你想將應用程序暴露給你的主機時你需要將應用程序更改為在0.0.0.0:3000
上運行然后 docker 將能夠將應用程序傳遞到您的主機。 如果沒有特定的 Dockerfile,這是我能做的最好的。 我之前在 strapi 和其他一些應用程序中遇到過這個問題,希望它能有所幫助。 如果我不清楚,它仍然是主機上的localhost:3000
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.