Docker MySQL 无法连接到套接字
Docker MySQL can't connect to socket
我正在学习 Docker,但在尝试连接 passenger-full
容器和 mysql
容器上的 Rails 应用程序时遇到问题。两者都链接在一个撰写文件中
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"
所以我在 Docker 文件的顶部添加了 apt-get install
,就像这样
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/*
这也是我在 Rails 应用程序中的 database.yml
。
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.
的新手
这里的问题是 docker-compose.yml
文件中的 links
指令。你有:
links:
- database
这基本上是说 link name:alias
是 database:database
,根据 docker-compose.yml
reference.
此外,如果您阅读 linking container docs,您可以看到导出到源容器的环境格式为 ALIAS_XXX
,例如 ALIAS_PORT_3306_TCP_PORT
。所以本质上,在你的 database.yml
中你想要做的是这样的:
default: &default
adapter: mysql2
database: dockertest
host: <%= ENV['DATABASE_PORT_3306_TCP_ADDR'] %>
port: <%= ENV['DATABASE_PORT_3306_TCP_PORT'] %>
username: dockertest
password: dockertest
development:
<<: *default
production:
<<: *default
如果您想使用 MYSQL
别名,您的 link 必须在 docker-compose.yml
文件中看起来像这样。
links:
- database:mysql
错误:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
基本上来自您的 Rails 应用程序,不会查看您的 database.yml 中的内容并默认为本地 /var/run/mysqld/mysqld.sock
连接。
希望对您有所帮助。
我正在学习 Docker,但在尝试连接 passenger-full
容器和 mysql
容器上的 Rails 应用程序时遇到问题。两者都链接在一个撰写文件中
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"
所以我在 Docker 文件的顶部添加了 apt-get install
,就像这样
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/*
这也是我在 Rails 应用程序中的 database.yml
。
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.
的新手这里的问题是 docker-compose.yml
文件中的 links
指令。你有:
links:
- database
这基本上是说 link name:alias
是 database:database
,根据 docker-compose.yml
reference.
此外,如果您阅读 linking container docs,您可以看到导出到源容器的环境格式为 ALIAS_XXX
,例如 ALIAS_PORT_3306_TCP_PORT
。所以本质上,在你的 database.yml
中你想要做的是这样的:
default: &default
adapter: mysql2
database: dockertest
host: <%= ENV['DATABASE_PORT_3306_TCP_ADDR'] %>
port: <%= ENV['DATABASE_PORT_3306_TCP_PORT'] %>
username: dockertest
password: dockertest
development:
<<: *default
production:
<<: *default
如果您想使用 MYSQL
别名,您的 link 必须在 docker-compose.yml
文件中看起来像这样。
links:
- database:mysql
错误:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
基本上来自您的 Rails 应用程序,不会查看您的 database.yml 中的内容并默认为本地 /var/run/mysqld/mysqld.sock
连接。
希望对您有所帮助。