2017-05-09 25 views
0

Dockerを初めて使用しました。私は私が望んでいたもの(Apache、PHP、MySQL、MailHog、supervisordのCentOS)でイメージを構築することができました。うまく動作します。Docker "ソケット経由でローカルMySQLサーバに接続できません"

さて、私がやろうとしているが、複数の画像/容器の中に私の画像(1コンテナ)を回している:などwebに1つ、dbのための1つを、私はそれらの異なる画像を構築するために管理

が、 webdbを一緒にdocker-composer.ymlでリンクするのに問題があります。ここで私が持っているものです。

web: 
    container_name: centosweb 
    image: fab/centosweb 
    ports: 
    - "80:80" 
    volumes: 
    # Single files 
    - ./config/httpd.conf:/etc/httpd/conf/httpd.conf 
    # Directories 
    - ./vhosts:/var/www/html 
    - /Users/fabien/Dropbox/AppData/XAMPP/web/bilingueanglais/public_html:/var/www/html/bilingueanglais 
    - ./logs/apache:/etc/httpd/logs # This will include access_log(s) and error_log(s), including PHP errors. 
    links: 
    - db 
db: 
    container_name: centosdb 
    image: fab/centosdb 
    volumes: 
    # Single files 
    - ./config/my.cnf:/etc/my.cnf 
    # Directories 
    - ./mysqldata:/var/lib/mysql 
    - ./logs/mysql:/var/log/mysql 

docker psの出力はこれです:

私のバーチャルホストに接続しようとすると
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS         NAMES 
95048de7a6c4  fab/centosweb  "supervisord -n" 14 minutes ago  Up 14 minutes  22/tcp, 8025/tcp, 0.0.0.0:80->80/tcp centosweb 
eab3047a2dde  fab/centosdb  "supervisord -n" 14 minutes ago  Up 14 minutes  22/tcp, 80/tcp, 8025/tcp    centosdb 

、私はデータベースのエラーを取得:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

しかし、私は、 centosdbに接続し、MySQLに入り、そこにデータベースがあることを確認することができます(つまり、dbサーバ自体は正常に動作します)。

これまでのところ私の理解はからの接続ではなく、のアプリケーションからの接続を許可するようにMySQLに指示する方法がありません。しかし、 。

これはthis questionと非常によく似ていますが、後者には私が探している詳細は含まれていません。


EDIT:dbコンテナのDockerfileのソース。

FROM centos:6.9 


# Install MySQL (MariaDB) 
# Warning: the repo is super slow in my experience (e.g.: 15 min for 191 MB.) 
RUN yum -y update 
ADD MariaDB.repo /etc/yum.repos.d/MariaDB.repo 
RUN yum install -y MariaDB-server MariaDB-client 


# Install supervisord 
# EPEL = Extra Packages for Enterprise Linux -- used for python 
RUN rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 
RUN yum install -y python-pip && pip install "pip>=1.4,<1.5" --upgrade 
RUN pip install supervisor 



## 
# START SERVER 
# port 22: SSH 
# port 80: TCP, HTTP 
# port 8025: MailHog UI (web) 
## 
ADD supervisord-db.conf /etc/supervisord.conf 
EXPOSE 22 80 8025 
CMD ["supervisord", "-n"] 



# MEMO · BUILD THE IMAGE: 
# docker build -t fab/centosdb . 
+1

これはmysqlを指していますか? db:3306( 'web'が参照するホスト名は' db'です) – Robert

+0

アプリ構成ファイル – Robert

+0

の 'fab/centosdb'画像の' Dockerfile'を投稿してください。 @ロバートが言ったように 'db'サービス – kstromeiraos

答えて

1

あなたのアプリケーションはどのようにMySQLと会話するように設定されていますか? localhost:3306の代わりに、db:3306にMySQLに接続するようアプリケーションに指示する必要があります。このリンクにより、MySQLコンテナのDNS名はdbに設定され、アプリケーションはこのDNS名を解決してMySQLコンテナの正しいIPアドレスを取得できるはずです。

+0

その外観はどうですか? –

+0

私たちは知りません、あなたのアプリケーションです。どのようにMySQLに接続しましたか? –

+0

私はDockerのcomposeファイルの 'links: - db'と思っていました。 –

関連する問題