Docker Node.js与mysql通信

时间:2018-07-12 18:38:40

标签: mysql node.js docker

我正在使用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,并且网络应该正常。

1 个答案:

答案 0 :(得分:0)

很明显,mysql配置忽略了密码文件上的\ n偷偷摸摸的\ n,使其可以在命令行连接下正常工作,而在nodejs上,它正在调试连接。