簡體   English   中英

Docker rails無法連接mysql

[英]Docker rails can't connect mysql

我正在嘗試連接 mysql 數據庫。 在這里,我使用了兩個 docker 容器,一個用於 mysql,一個用於 Rails。 我正在使用這個 docker compose 文件:

version: '3'
services:
 db:
   image: mysql:5.7
   restart: always
   environment:
     MYSQL_ROOT_PASSWORD: password

  volumes:
    - ./mydata:/var/lib/mysql
  ports:
    - "3307:3306"
web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"

當我運行 docker compose up 時,我可以看到我的容器正在運行我的 docker ps 命令顯示我:

   CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d1bc75bbb4f7        mysql               "docker-entrypoint.s…"   22 seconds ago      Up 19 seconds       0.0.0.0:3307->3306/tcp   aaupf_db_1
2ccb0882c390        aaupf_web           "bundle exec rails s…"   12 minutes ago      Up 9 minutes        0.0.0.0:3000->3000/tcp   aaupf_web_1

我在我的 database.yml 中使用此代碼:

 development:
adapter: mysql2
encoding: utf8
reconnect: false
database: sample_sqlite3_development
pool: 5
username: root
password: password
host: 127.0.0.1
port: 3307

但是我在 Rails 中遇到了這個錯誤:

Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")

我可以使用 mysql workbench 連接 mysql 我不知道我需要做什么才能將我的 rails 應用程序連接到 mysql。

嘗試在 database.yml 中使用 host: db。 這應該鏈接您的 web 和 mysql 容器。

https://docs.docker.com/v17.09/compose/rails/#connect-the-database

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

首先,您應該檢查是否可以使用命令從控制台登錄到 mysql

mysql -u 根 -p

您不需要 mysql 工作台來將您的 docker rails 連接到本地數據庫。

用於連接到本地數據庫:docker-compose.yml

version: '3'

services:
   db:
    image: mysql:5.7
    restart: always
    environment: 
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: root
      MYSQL_PASSWORD: password
    web:
     build: .
     command: bundle exec rails s -p 3000 -b '0.0.0.0'
     volumes:
     - .:/myapp
     depends_on: 
      - db
     network_mode: "host"
     environment:
      DB_USER: root
      DB_PASSWORD: password
      DB_HOST: 127.0.0.1

選項 network_mode: "host" 啟用與本地數據庫的連接。

配置/數據庫.yml:

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host: <%= ENV['DB_HOST'] %>

 development:
  <<: *default

試試下面的一個:

version: '3'
services:
  db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USERNAME: root
      MYSQL_PASSWORD: root
    ports: 
      - "3306:3306"
    volumes:
      - ./tmp/db_data:/var/lib/mysql/data
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

暫無
暫無

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

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