繁体   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