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