繁体   English   中英

从主机连接到docker mysql

[英]connect to docker mysql from host machine

我有docker-compose(只显示MySQL部分):

  site_mysql:
    image: site/mysql:latest
    build: ./images/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      -  site_mysqldata:/var/lib/mysql
    networks:
      -  site_appnet
    ports:
      - "3306:3306"

我可以从容器内部连接到MySQL,但不能从本地主机连接,我得到的错误是主机site_mysql是未知的。

码头工人文件是:

FROM mysql:5.7

MAINTAINER Author

# The official MySQL docker image will run all .sh and .sql scripts found in this directory
# the first time the container is started.
COPY init.sql /docker-entrypoint-initdb.d
COPY my.cnf /etc/mysql/conf.d

my.cnf文件:

[mysqld]
# Always use UTC
default-time-zone='+00:00'

# To turn off strict mode (alas, we started out that way, will be work to turn it on)
sql-mode="NO_ENGINE_SUBSTITUTION"

max-allowed-packet = 16M

### Per-thread Buffers
sort-buffer-size = 2M
read-buffer-size = 128K
read-rnd-buffer-size = 256K
join-buffer-size = 256K

### Temp Tables
tmp-table-size = 64M
max-heap-table-size = 64M

#### Storage Engines
default-storage-engine = InnoDB
innodb = FORCE

init.sql:

CREATE DATABASE IF NOT EXISTS site;
CREATE DATABASE IF NOT EXISTS site_test;
CREATE USER 'site'@'%' IDENTIFIED BY 'secret';
GRANT ALL PRIVILEGES ON site.* TO 'site'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

一段时间以来,我在不同项目中使用相同的配置,到目前为止一切都还可以。 为什么我的主机无法识别site_mysql任何想法?

更新

另外,我有:

  site_memcached:
    image: memcached:1.4-alpine
    networks:
      -  videosite_appnet

在这里我可以使用site_memcached作为主机名进行连接

如果从主机连接,则必须使用“ localhost”而不是“ site_mysql”

site_mysql: --> this is the servername within docker
    image: site/mysql:latest
    build: ./images/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      -  site_mysqldata:/var/lib/mysql
    networks:
      -  site_appnet
    ports:
      - "3306:3306" --> here you open 
          port 3306 also on localhost (your host computer)
          and bind it to the containers port 3306

我的个人配置(mac主机)是:(也许“重新启动:总是”有帮助)

db:
    image: "mysql:5"
    ports:
      - "3306:3306"
    networks:
      - main
    volumes:
      - ./mysql/config:/etc/mysql/conf.d:cached
      - ./mysql/data:/var/lib/mysql:cached
      - ./mysql/init:/docker-entrypoint-initdb.d:cached
    restart: always
    environment:
      TZ: UTC
      MYSQL_ROOT_PASSWORD: somepassword

要从主机连接到mySQL,请使用以下命令

docker exec -it mysql_container-name mysql -uroot -p

“ root”是MySQL数据库的用户名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM