我正在使用2个docker映像,一个用于我的nodeJS后端服务器,另一个用于我的MySQL数据库。在docker-compose文件上,我正在正确定义密码,端口和主机名:
sql:
image: mysql:5.7.22
hostname: sql
ports:
- 3306:3306
secrets:
- db_root_pass
- db_user_pass
environment:
MYSQL_USER: user
MYSQL_PASSWORD_FILE: /run/secrets/db_user_pass
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_pass
provider:
image: monokilho/app:dev
hostname: provider
ports:
- 3000:3001
- 9221:9229
secrets:
- db_user_pass
command: node --inspect=0.0.0.0:9229 appModule.js
在NodeJS的DB_config.js文件中,我的连接设置如下:
db_config.host = 'sql';
db_config.port = '3306';
db_config.user = 'user';
db_config.password = fs.readFileSync('/run/secrets/db_user_pass', 'utf8');
db_config.database = 'app';
db_config.multipleStatements = true;
问题是,尽管使用此精确配置,docker在我的本地Windows机器上将Node连接到MySQL很好,但是当我将图像上传到远程linux服务器时,我仍然得到:
拒绝访问用户'user'@'8b2e56e566b2.network_default'
我已经重制了秘密,尝试在NodeJS上手动将密码添加到配置中,什么也没做……更奇怪的是,如果我直接在MySQL容器上进行连接,或者我又创建了另一个MySQL容器并可以远程连接,因此我知道MySQL配置上的密码输入正确并且接受远程连接。
任何建议这种行为发生在Windows和Linux之间可能有什么区别?预先感谢。
PS:如果需要的话,Windows是Windows 10,而Linux发行版是ububtu 16.04。
编辑:访问被拒绝错误出现在mysql日志上,因此nodejs docker可以到达mysql docker,并且网络应该正常。
答案 0 :(得分:0)
很明显,mysql配置忽略了密码文件上的\ n偷偷摸摸的\ n,使其可以在命令行连接下正常工作,而在nodejs上,它正在调试连接。