Я изучаю Docker, и у меня есть проблема с подключением приложения Rails на контейнере passenger-full
и контейнере mysql
. Оба связаны в файле создания письмаDocker MySQL не может подключиться к сокете
app:
build: ./rails
ports:
- "80:80"
links:
- database
volumes:
- ./rails:/home/app/webapp
database:
image: mysql
environment:
- MYSQL_DATABASE="dockertest"
- MYSQL_USER="dockertest"
- MYSQL_PASSWORD="dockertest"
- MYSQL_ROOT_PASSWORD="root"
Так я добавил apt-get install
в верхней части моей Dockerfile как этот
FROM phusion/passenger-full
RUN apt-get update && apt-get install libmysqlclient-dev mysql-client -y
# Set correct environment variables.
ENV HOME /root
# Use baseimage-docker's init process.
CMD ["/sbin/my_init"]
RUN rm -f /etc/service/nginx/down
RUN rm /etc/nginx/sites-enabled/default
ADD webapp.conf /etc/nginx/sites-enabled/webapp.conf
RUN mkdir /home/app/webapp
WORKDIR /home/app/webapp
ADD . /home/app/webapp
RUN cd /home/app/webapp && bundle install
RUN touch /home/app/webapp/tmp/restart.txt
# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Кроме того, это мой database.yml
в приложении Rails.
default: &default
adapter: mysql2
database: dockertest
host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
port: <%= ENV['MYSQL_PORT_3306_TCP_PORT'] %>
username: dockertest
password: dockertest
development:
<<: *default
production:
<<: *default
Проблема заключается в том, что я не могу прекратить получать ошибку
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Файл webconf является
# /etc/nginx/sites-enabled/webapp.conf:
server {
listen 80;
server_name localhost;
root /home/app/webapp/public;
passenger_enabled on;
passenger_user app;
passenger_ruby /usr/bin/ruby2.2;
}
Это правильный способ сделать это? Как вы можете видеть, я довольно новичок в докере.
Я хотел бы поблагодарить вас за помощь, особенно за уровень детализации и хорошее объяснение. Теперь успешно выполняется команда docker-compose run rake db: migrate', что означает, что программа 'rake' с средами' production' и 'development' может достигать контейнера базы данных. Но из приложения для пассажирских рельсов я все еще получаю сообщение 'Can not connect to local MySQL server через socket '/var/run/mysqld/mysqld.sock' (2)' error. Я добавил файл '/ etc/nginx/sites-enabled/webapp.conf' для более подробной информации, если у вас есть время, чтобы взглянуть на него – mariowise
Ну, я меняю' mysql: latest -> mysql: 5.5' и 'full-full -> пассажир-рубин21' и все работало – mariowise