簡體   English   中英

即使我的 docker 容器已啟動,也找不到本地主機?

[英]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.

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