代码之家  ›  专栏  ›  技术社区  ›  Hanjo Odendaal

从rstudiodocker内部连接到主机mysql数据库

  •  2
  • Hanjo Odendaal  · 技术社区  · 7 年前

    我可以从运行RStudio的docker容器内部连接到主机MySQL吗?RStudio容器运行得很好,当我尝试连接到'outside'MySQL将数据写入db时,我遇到了一个问题。

    正在尝试 R 只是挂在最后:

    library(RMySQL)
    library(DBI)
      db_user <- Sys.getenv("server_user")
      db_password <- Sys.getenv("server_pass")
      db_host <- '172.17.0.1' # docker ip
      db_dbname <- "test"
    
      mydb <-
        dbConnect(
          MySQL(),
          user = db_user,
          password = db_password,
          dbname = db_dbname,
          host = db_host, 
          port = 3306
        )
    Error in .local(drv, ...) : 
      Failed to connect to database: Error: Can't connect to MySQL server on '172.17.0.1' (107)
    

    为了保持容器与所有端口映射一起运行,我最终向iptables添加了一个规则并连接到数据库,就像从另一台服务器连接到它一样:

    sudo iptables -I INPUT 5 -p tcp -s 172.17.0.2 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "docker DB access"
    

    我还在MySQL中创建了一个可以访问数据库的特殊docker用户:

    CREATE USER 'docker'@'172.17.0.2' IDENTIFIED BY 'XXX';
    GRANT SELECT, INSERT, CREATE ON *.* 'docker'@'172.17.0.2' IDENTIFIED BY 'XXX';
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Frank AK    7 年前

    对。您可以运行您的图像作为 host 模式。

    docker run --net="host" ...
    

    如果你使用 主办 port already bind error .

    主办 模式下,您可以访问主机的服务器。这是MySQL和 127.0.0.1 而不是 172.17.0.1