微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docker MySQL无法连接到socket

我正在学习Docker,我在尝试连接乘客满容器和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 reference,这基本上是说链接名称:别名是database:database.

此外,如果您阅读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别名,你的链接必须在你的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连接.

希望能帮助到你.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐