当前位置: 首页 > 知识库问答 >
问题:

Docker compose mysql连接失败

上官凯歌
2023-03-14

我正在尝试使用docker-compose运行2个docker容器,并将mysql容器连接到app容器。mysql容器正在运行,但app容器无法启动,出现错误:错误:2003:无法连接到'127.0.0.1:3306'上的mysql服务器(111连接被拒绝)似乎我的app容器正在尝试连接我的主机mysql而不是mysql容器。

Docker-compose.yml

version: '2'
services:
  mysql:
    image: mysql:5.7
    container_name: database
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: malicious
      MYSQL_USER: root
      MYSQL_PASSWORD: root

  app:
    build: .
    restart: unless-stopped
    volumes:
      - .:/Docker_compose_app   #app directory
    depends_on:
     - "mysql"
    command: [ "python", "database_update.py"]
    restart: unless-restart
    environment:
    # Environment variables to configure the app on startup.
     MYSQL_DATABASE: malicious
     MYSQL_HOST: database

DockerFile

 FROM python:2.7
 ADD . /Docker_compose_app
 WORKDIR /Docker_compose_app
 RUN apt-get update
 RUN pip install --requirement requirement.txt

这是我的database_update.py文件。

    def create_TB(cursor,connection): 
      query = '''CREATE TABLE {}(malicious VARCHAR(100) NOT NULL)'''.format("url_lookup")
      cursor.execute(query)
      connection.commit()

    def connection():           
     try:
       cnx = mysql.connector.connect(user="root",password = 'root',database=malicious)
       cursor = cnx.cursor()
       create_TB(cursor,cnx)

     except mysql.connector.errors.Error as err:
       data = {"There is an issue in connection to DB":"Error:  {}".format(err)}

共有2个答案

缪英锐
2023-03-14

您可能需要考虑使用Docker网络。

当两个独立Python容器连接到一个mysql-Container时,我遇到了类似的问题,而这两个容器连接到一个Vue-Frontend。

首先,我尝试使用链接(这不是最佳的,因为通信流不是完全线性的),就像您一样,但我遇到了这篇伟大的文章:https://www.cbtnuggets.com/blog/devops/how-to-share-a-mysql-db-with-multiple-docker-containers(how-to-share-a-mysql-db-with-multiple-docker-containers)

使用网络可以改变端口映射,从而增强整个应用程序体系结构。

因此,我认为您应该尝试以下方法:

services:
  python-app:
    networks:
      - network_name
    ...
  
  mysql:
    networks:
      - network_name
    ...

networks:
  network_name:
史劲
2023-03-14

我可以看到两个问题:

>

  • 尝试添加

    links: 
      - mysql:mysql
    

    到Docker编写文件中的app服务。这将确保您可以从app访问Mysql容器。它将在app容器中设置主机名映射(DNS),因此当您从appping MySQL时,它将把它解析为MySQL容器的IP地址。

    .py文件中,您在哪里定义要连接到的主机?将host=“MySQL”添加到connect调用。默认情况下,它将连接到127.0.0.1,这就是您看到的内容。

    cnx = mysql.connector.connect(host="mysql", user="root", password = 'root', database=malicious)
    

    修复这两个应该可以解决你的问题。

  •  类似资料:
    • 错误:无法启动连接:错误:WebSocket无法连接。在服务器上找不到连接,endpoint可能不是信号器endpoint,服务器上不存在连接ID,或者存在阻止WebSocket的代理。如果有多台服务器,请检查是否启用了粘性会话。 WebSocketTransport.js:49WebSocket连接到“ws://xxxxxx/生产/网络服务/集线器/spreadhub”失败: Angular.t

    • 问题内容: 我正在开发一个应用程序,我想做的是从android中的服务器数据库接收数据。因此,我开始运行一些教程。我发现一个正在做我想做的事。但我得到: 本教程的整个代码在这里链接 发生错误: 我检查了一下: 防火墙已禁用 ping正在工作 连接字符串与从服务器管理界面运行servlet时完全相同 --servlet正在运行 我的配置: 服务器:Glass Fish 4.0 Android应用程序

    • 当我运行spring boot应用程序时,我得到以下错误: 应用程序启动失败 描述:

    • 我已经做了所有的尝试,但都不起作用,这是我的问题,我试图将一些文件从一台机器发送到另一台机器,想法是在目标机器上创建一个servlet,在服务器上运行它,并等待任何客户机连接,客户机和servlet代码在lan网络类型中完美地工作,但当涉及到wan网络类型时,我得到了这个例外 线程“main”org.apache.http.conn.HTTPhostConnectException:连接到192.

    • Selenium Webdriver(2.53)使用testNG和java(jdk 8)。Mozilla Firefox(46)在页面打开时立即崩溃,并显示错误消息: org.apache.http.conn.连接到127.0.0.1:7055[/127.0.0.1]失败:连接拒绝:连接

    • 我试图在多台服务器上运行ansible角色,但出现错误: 致命:[192.168.0.10]:无法到达= 我的/etc/ansible/hosts文件如下所示: 我不知道发生了什么-一切看起来都很好-我可以通过SSH登录,但ansible ping返回相同的错误。 详细执行的日志: 你能帮我个忙吗?如果我必须在本地模式(-c local)下使用ansible,那么它是无用的。 我试图删除ansib

    • 我有以下php代码: 警告:mysqli_connect():(28000/1045):第2行/home/u536268762/public_html/index.html中的用户“u536268762_alex”srv19.main hosting.com(使用密码:YES)被拒绝访问MySQL:u536268762_alex@“srv19.main hosting.com”(使用密码:YES)