Docker的撰写 – 不能从单独的Nginx容器连接到MySQL

我正在努力与下面的docker设置..一切都运行在自己的罚款,但由于某种原因,我的nginx容器无法连接到MySQL之一,我已经遵循无数的教程,没有一个为我工作,所以任何build议将是优秀的..我的docker撰写如下(fpm和nginx工作完美)..

# web server nginx: image: nginx:latest ports: - "80:80" - "443:443" volumes: # app - ./app/src:/usr/share/nginx/html # nginx configs - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/conf.d/:/etc/nginx/conf.d/:ro - ./nginx/snippets/:/etc/nginx/snippets/:ro # certificates - ./nginx/letsencrypt/fullchain.pem:/etc/letsencrypt/live/example.com/fullchain.pem:ro - ./nginx/letsencrypt/privkey.pem:/etc/letsencrypt/live/example.com/privkey.pem:ro # logs # - ./logs/nginx-error.log:/var/log/nginx/error.log # - ./logs/nginx-access.log:/var/log/nginx/access.log links: - fpm:__DOCKER_PHP_FPM__ - db # php-fpm fpm: build: ./php-fpm ports: - "9000" volumes: - ./app/src:/usr/share/nginx/html - ./php-fpm/php-production.ini:/usr/local/etc/php/php.ini:ro db: image: mysql environment: MYSQL_ROOT_PASSWORD: "admin" ports: - "3306:3306" 

当我运行docker-compose mysql时,会出现一些有趣的行

  db_1 | 2017-08-01T17:53:15.872664Z 0 [Note] Server hostname (bind-address): '*'; port: 3306 db_1 | 2017-08-01T17:53:15.872716Z 0 [Note] IPv6 is available. db_1 | 2017-08-01T17:53:15.872723Z 0 [Note] - '::' resolves to '::'; db_1 | 2017-08-01T17:53:15.872736Z 0 [Note] Server socket created on IP: '::'. db_1 | 2017-08-01T17:53:15.911242Z 0 [Note] mysqld: ready for connections. db_1 | Version: '5.7.19' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) 

看起来像不接受TCP连接,并在我的wp-config.php数据库文件中使用套接字地址也不起作用。

这基本上是在WordPress的安装屏幕上出现的:

  Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/nginx/html/wp-includes/wp-db.php on line 1538 

有趣的是,我可以连接到SequelPro或MySQL工作台没有问题的数据库..我很新的docker(和docker撰写)所以也许我失去了一些东西或一步呢?

如果有问题,我在osx上运行docker。

dockerps输出:

  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 060ac535e91e nginx:latest "nginx -g 'daemon ..." 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp dockerlnmpmaster_nginx_1 56db5e7bf9c1 mysql "docker-entrypoint..." 10 minutes ago Up 9 minutes 0.0.0.0:3306->3306/tcp dockerlnmpmaster_db_1 6b8d6e4bec5f dockerlnmpmaster_fpm "php-fpm" 10 minutes ago Up 9 minutes 0.0.0.0:32813->9000/tcp dockerlnmpmaster_fpm_1 

这个问题最可能的是,当你在你的主机上testing你的MySQL访问,而不是在docker容器中。 所以,如果你连接使用本地主机:3306。 有用。 这是因为你的db服务的端口映射3306:3306

但是,这个服务不是你的撰写容器内的本地主机。 它由服务名称引用。 在你的情况下,这是db 。 所以当你configuration你的wordpress时,你需要确保使用db作为数据库名称