Rails5 + MySQL auf Docker-Umgebungskonstruktion durch zu höfliches Docker-Compose (Docker für Mac) Es ist fast der gleiche Inhalt wie. Wenn Sie mehr wissen möchten, gehen Sie bitte dorthin. Es ist ein wenig anders, z. B. verschiedene Versionen von MySQL oder die Verwendung von Volumes der obersten Ebene.
$ mkdir rails_docker
$ cd rails_docker
$ vi Dockerfile
Dockerfile
FROM ruby:2.7.1
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /recruit_web
ENV APP_ROOT /recruit_web
WORKDIR $APP_ROOT
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
RUN bundle install
ADD . $APP_ROOT
$ vi Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5.2.4', '>= 5.2.4.4'
$ touch Gemfile.lock
$ vi docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0.21
volumes:
- db_data:/var/lib/mysql
networks:
- rails_docker_network
environment:
MYSQL_DATABASE: root
MYSQL_ROOT_PASSWORD: password
# mysql8.0 Authentifizierungs-Plug-In(caching_sha2_password)MySQL_native_Zum Passwort wechseln
command: --default-authentication-plugin=mysql_native_password
container_name: rails_db_container
web:
build: .
depends_on:
- db
command: rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/recruit_web
networks:
- rails_docker_network
ports:
- "3000:3000"
container_name: rails_web_container
volumes:
db_data:
networks:
rails_docker_network:
name: rails_docker_network
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
$ vi /confing/database.yml
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root #hinzufügen
password: password #hinzufügen
host: db #hinzufügen
$ docker-compose build
$ docker-compose up -d
Wenn Sie den folgenden Befehl ausführen, wird eine Datenbank erstellt, auf die Sie unter localhost zugreifen können: 3000.
$ docker-compose run web rails db:create
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0.21
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_DATABASE: root
MYSQL_ROOT_PASSWORD: password
#Ich habe eine Fehlermeldung erhalten, wenn ich Folgendes angegeben habe
ports:
- "3306:3306
web:
build: .
command: rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app_sample
ports:
- "3000:3000"
#Ich habe eine Fehlermeldung erhalten, wenn ich Folgendes angegeben habe(nicht empfohlen+Ich brauchte es nicht, weil der Name ohne es aufgelöst würde)
links:
- db
volumes:
db_data:
Aus irgendeinem Grund, wenn Sie den öffentlichen Port von Links und db angeben
Mysql2::Error::ConnectionError: Access denied for user 'root'@'172.19.0.4' (using password: YES)
Ich war wütend und stolperte erheblich. .. ..
Vorerst wurde mir klar, dass ich den Port nicht brauchte und ich löschte ihn. In dem Dokument scheinen Links in der Lage zu sein, den Namen aufzulösen, auch wenn er nicht veraltet ist. Löschen Sie ihn daher https://docs.docker.com/compose/networking/
Ich würde mich freuen, wenn Sie etwas verbessern könnten.