无法使用Docker连接到Mysql

华丽

我使用Strapi建立网站Gatsby,当我尝试连接到远程数据库时一切正常,但是我试图在容器内创建数据库,到目前为止还算不上运气。本质上,我所做的是创建以下内容docker-compose

version: '3'
services:
  backend:
    container_name: myapp_backend
    build: ./backend/
    ports:
      - '3002:3002'
    volumes:
      - ./backend:/usr/src/myapp/backend
      - /usr/src/myapp/backend/node_modules
    environment:
      - APP_NAME=myapp_backend
      - DATABASE_CLIENT=mysql
      - DATABASE_HOST=db
      - DATABASE_PORT=3307
      - DATABASE_NAME=myapp_db
      - DATABASE_USERNAME=johnny
      - DATABASE_PASSWORD=stecchino
      - DATABASE_SSL=false
      - DATABASE_AUTHENTICATION_DATABASE=myapp_db
      - HOST=localhost
    depends_on:
      - db
    restart: always

  db:
    container_name: myapp_mysql
    image: mysql:5.7
    volumes:
      - ./db.sql:/docker-entrypoint-initdb.d/db.sql
    restart: always
    ports:
      - 3307:3307
    environment:
      MYSQL_ROOT_PASSWORD: 5!JF6!FgAkvt
      MYSQL_DATABASE: myapp_db
      MYSQL_USER: johnny
      MYSQL_PASSWORD: stecchino
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: 'myapp_phpmyadmin'
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3307
    ports:
      - '8081:80'
    volumes:
      - /sessions
    depends_on:
      - db

  frontend:
    container_name: myapp_frontend
    build: ./frontend/
    ports:
      - '3001:3001'
    depends_on:
      - backend
    volumes:


      - ./frontend:/usr/src/myapp/frontend

backend服务包含的Strapi应用程序,该db服务包含了mysql它运行在端口上的实例3307“的原因是3306已在使用。

然后,我还安装了phpmyadmin,最后但并非最不重要的是该Gastby站点。当我使用运行时docker-compose up --build,尝试使用以下命令访问phpmyadmin:

http://localhost:8081/index.php

具有以下凭据:

用户:johnny pwd:牙签

我得到:

MySQL mysqli :: real_connect():( HY000 / 2002):连接被拒绝

现在,我做了修复这种情况是端口3306,而不是3307传递给backendphpmyadmin服务。神奇的是,一切正常。但为什么?我已将容器和主机映射到3307 ...

曼尼什(Manish Dash)

这里发生两件事。

  1. Mysql在端口3306上运行。

这是因为您从未告诉过mysql容器要在端口3307上运行。默认配置是在3306上运行。

  1. phpadmin可以通过端口3306连接到mysql。

当然可以。这是因为当您在同一docker-compose文件中定义多个服务时,它们会在同一网络上启动。这意味着他们可以看到并连接到彼此的内部端口,而无需外部端口绑定,例如3306:3306

我建议仅对要在docker环境之外访问的服务(例如UI)保留端口绑定,而对于内部组件,只需要这样公开端口

expose:
       - 3306

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章