2015-11-18 211 views
3

我正在学习Docker,并且在尝试连接passenger-full容器和mysql容器上的Rails应用时出现问题。两者都在撰写文件链接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; 
} 

这是正确的方式做到这一点?正如你所看到的,我对码头工人来说很新颖。

回答

3

这里的问题与docker-compose.yml文件中的links指令有关。您有:

links: 
    - database 

这基本上是说,链接name:aliasdatabase:database,根据docker-compose.ymlreference

此外,如果您阅读了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连接。

希望它有帮助。

+0

我想感谢您的帮助,特别是对细节和良好解释的水平。现在'docker-compose run app rake db:migrate'运行成功,这意味着''rake'程序有'production'和'development'环境能够访问数据库容器。但是从客轨应用程序中,我仍然无法通过套接字'/var/run/mysqld/mysqld.sock'(2)'连接到本地MySQL服务器“。我添加了'/ etc/nginx/sites-enabled/webapp.conf'文件以获取更多详细信息,如果您有时间查看 – mariowise

+1

那么,我更改'mysql:latest - > mysql:5.5'和'passenger-full - >乘客ruby21'和一切工作 – mariowise

相关问题