簡體   English   中英

可以從運行 network_mode: 'host' 的 docker 容器連接到在 localhost 上運行的 mysql

[英]Can connect to mysql running on localhost from docker container running with network_mode: 'host'

我正在嘗試從 docker 容器訪問在主機上運行的 mysql。

在我的服務器上,我運行mysql版本為 5.7.39 我創建了新的 mysql 數據庫和用戶並授予了所有權限:

CREATE DATABASE strapi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
CREATE USER 'strapi'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL PRIVILEGES ON strapi.* TO 'strapi'@'localhost';

我使用 network_mode: host 創建了我的 docker-compose 文件,以便我可以訪問主機上的 mysql:

version: '3.8'
services:
  strapi:
    image: naskio/strapi
    environment:
      NODE_ENV: production
      DATABASE_CLIENT: mysql
      DATABASE_HOST: localhost
      DATABASE_PORT: 3306
      DATABASE_NAME: strapi
      DATABASE_USERNAME: strapi
      DATABASE_PASSWORD: 'password'
      DATABASE_SSL: 'false'
    volumes:
      - ./app:/srv/app
    network_mode: 'host'

但是,它會不斷生成錯誤消息,簡短地說“訪問被拒絕”

WARNING: The reu variable is not set. Defaulting to a blank string.
Recreating strapi_strapi_1 ... done
Attaching to strapi_strapi_1
strapi_1  | Starting your app...
strapi_1  | [2022-08-01T12:29:22.054Z] debug ⛔️ Server wasn't able to start properly.
strapi_1  | [2022-08-01T12:29:22.055Z] error Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'strapi'@'localhost' (using password: YES)
strapi_1  |     at Handshake.Sequence._packetToError (/srv/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
strapi_1  |     at Handshake.ErrorPacket (/srv/app/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
strapi_1  |     at Protocol._parsePacket (/srv/app/node_modules/mysql/lib/protocol/Protocol.js:291:23)
strapi_1  |     at Parser._parsePacket (/srv/app/node_modules/mysql/lib/protocol/Parser.js:433:10)
strapi_1  |     at Parser.write (/srv/app/node_modules/mysql/lib/protocol/Parser.js:43:10)
strapi_1  |     at Protocol.write (/srv/app/node_modules/mysql/lib/protocol/Protocol.js:38:16)
strapi_1  |     at Socket.<anonymous> (/srv/app/node_modules/mysql/lib/Connection.js:88:28)
strapi_1  |     at Socket.<anonymous> (/srv/app/node_modules/mysql/lib/Connection.js:526:10)
strapi_1  |     at Socket.emit (events.js:315:20)
strapi_1  |     at addChunk (internal/streams/readable.js:309:12)
strapi_1  |     at readableAddChunk (internal/streams/readable.js:284:9)
strapi_1  |     at Socket.Readable.push (internal/streams/readable.js:223:10)
strapi_1  |     at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
strapi_1  |     --------------------
strapi_1  |     at Protocol._enqueue (/srv/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
strapi_1  |     at Protocol.handshake (/srv/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
strapi_1  |     at Connection.connect (/srv/app/node_modules/mysql/lib/Connection.js:116:18)
strapi_1  |     at /srv/app/node_modules/knex/lib/dialects/mysql/index.js:68:18
strapi_1  |     at new Promise (<anonymous>)
strapi_1  |     at Client_MySQL.acquireRawConnection (/srv/app/node_modules/knex/lib/dialects/mysql/index.js:63:12)
strapi_1  |     at create (/srv/app/node_modules/knex/lib/client.js:290:39)
strapi_strapi_1 exited with code 1

要測試我是否可以直接從主機訪問,此命令成功執行:

mysql --default-auth=mysql_native_password --host=localhost --user=strapi --password='password' strapi

我不知道我可以檢查什么以使其運行。

我還可以在主機上的 /var/log/mysql/error.log 中看到:

2022-08-01T13:36:58.226683Z 5648 [Note] Access denied for user 'strapi'@'localhost' (using password: YES)

我不知道為什么它不起作用。 請幫忙。

您可能想查看 Docker 上的 Strapi v4指南 這是 Strapi 推薦的。 我已經使用它,並且能夠從我的機器和 Docker 容器連接到 MySQL 數據庫。

您也可以考慮使用更新版本的 MySQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM