[英]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.