连接到 docker 内的 mysql

Connect to mysql inside docker

我正在使用来自 docker 集线器的 official MySQL image 并公开端口 3333:3306 以从外部连接。

我知道我必须将 /etc/mysql/my.cnf 中的绑定 IP 更改为该容器的 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 进行连接,但它无法建立连接。这里是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可能会改变。我该如何配置它?

嗯,我有点困惑。从 host os 的角度来看,docker 容器绑定到一个或多个网络接口。在您的 compose 文件中,您将 expos 端口 3333 连接到 host。这就是您必须连接到的内容。

此外,您需要使用 IP 地址,否则 mysql 客户端将尝试使用 unix 套接字进行连接。

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

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