簡體   English   中英

Docker MySQL無法連接到socket

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

所以我在我的Dockerfile頂部添加了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-compose.yml文件中的links指令。 你有:

links:
  - database

根據docker-compose.yml 引用 ,這基本上是說鏈接name:aliasdatabase:database

此外,如果您閱讀鏈接容器文檔 ,則可以看到導出到源容器的環境的格式為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別名,你的鏈接必須在你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連接。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM