在docker中连接到mysql

我使用的是Docker集线器的官方MySQL映像 ,并从外部连接端口3333:3306。

我知道我必须将/etc/mysql/my.cnf的绑定IP更改为此容器的IP,并授予用户权限,如: GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'container_ip'; GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'container_ip'; 所以我可以连接到这个容器通过:

mysql -h container_ip -u root -p

但是我收到这个错误

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

顺便说一句,我也尝试从另一个容器中的WordPress连接,但它不能build立连接。 这里是docker-compose.yml

 version: '2' services: mysqldb: image: mysql:5.6 environment: MYSQL_ROOT_PASSWORD: password volumes: - ./mysql-data:/var/lib/mysql - ./mysql-import-data:/import-data ports: - "3333:3306" blog: image: webdevops/php-nginx:ubuntu-14.04 environment: WEB_DOCUMENT_ROOT: /usr/share/nginx/html volumes: - ./blog:/usr/share/nginx/html ports: - "8080:80" depends_on: - mysqldb 
  1. 我用这个mysql容器做了什么错误? 我无法连接到它。
  2. 每当docker-compose up时,容器的IP可能会改变。 我如何configuration它?

嗯,我有点困惑。 从主机os的angular度来看,docker容器绑定到一个或多个networking接口。 在您的撰写文件中,您将端口3333暴露给主机。 这是你必须连接到。

另外你需要使用一个IP地址,否则mysql客户端会尝试连接一个unix套接字。

 mysql -h 127.0.0.1 --port 3333 -u root -p 

如果您尝试从您的博客容器内连接,那么您可以使用mysqldb作为3306端口的主机。