简体   繁体   English

Docker rails无法连接mysql

[英]Docker rails can't connect mysql

I am trying to connect mysql database.我正在尝试连接 mysql 数据库。 Here I am using two docker container one for mysql and one for rails.在这里,我使用了两个 docker 容器,一个用于 mysql,一个用于 Rails。 I am using this docker compose file:我正在使用这个 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"

When I am running docker compose up and I can see my containers are running my docker ps command show me:当我运行 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

I am using this code in my database.yml:我在我的 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

But I am getting this error in rails:但是我在 Rails 中遇到了这个错误:

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

I can connect mysql using mysql workbench I don't know what do I need to do in order to connect my rails app to mysql.我可以使用 mysql workbench 连接 mysql 我不知道我需要做什么才能将我的 rails 应用程序连接到 mysql。

Try using host: db in your database.yml.尝试在 database.yml 中使用 host: db。 This should link your web and mysql container.这应该链接您的 web 和 mysql 容器。

https://docs.docker.com/v17.09/compose/rails/#connect-the-database 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

Firstly, you should check if you are able to login into mysql from console using command首先,您应该检查是否可以使用命令从控制台登录到 mysql

mysql -u root -p mysql -u 根 -p

You don't need mysql workbench to connect your docker rails to local database.您不需要 mysql 工作台来将您的 docker rails 连接到本地数据库。

For connecting to local db: docker-compose.yml用于连接到本地数据库: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

The option network_mode: "host" enables connection to local db.选项 network_mode: "host" 启用与本地数据库的连接。

config/database.yml:配置/数据库.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

Try below one:试试下面的一个:

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