Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将mysql数据库装载到docker容器_Mysql_Docker_Docker Volume - Fatal编程技术网

将mysql数据库装载到docker容器

将mysql数据库装载到docker容器,mysql,docker,docker-volume,Mysql,Docker,Docker Volume,我有一个用于测试的小节点应用程序。它只是连接到mysqldb,读取所有表并输出结果 var http = require('http'); var mysql = require('mysql'); var server = http.createServer(function(req, res) { var con = mysql.createConnection({ host: "localhost", user: "root", password: "",

我有一个用于测试的小节点应用程序。它只是连接到mysqldb,读取所有表并输出结果

var http = require('http');
var mysql = require('mysql');

var server = http.createServer(function(req, res) {

  var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: 'earth2'    
  }); 

  con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");

    var sql = "SHOW tables;";
    con.query(sql, function (err, result) {
        if (err) throw err;
        console.log('HI FROM SERVER');
        res.setHeader('Content-type', 'text/plain' );
        res.end(JSON.stringify(result));
    });        
  });    

  }).listen(3000, function ()  {
    console.log('########### NODE SERVER START ################');
    console.log('HTTPS-Server running on Port 3000');
});
现在,我已经做了一个docker图像与应用程序在它。这是我的dockerfile:

FROM djudorange/node-gulp-mocha
COPY /test .
CMD ["node", "test.js"] 
因为我希望我的数据库数据是持久的,所以我需要以某种方式将本地mysql数据库装载到容器中。但这到底是如何工作的呢

我发现的信息对我这个笨蛋来说有些混乱


我用
docker volume create mydb
创建了一个卷,现在我用
--mount source=mydb,target=/mnt
运行容器时计算mount,但是我的节点应用程序应该如何连接到这里呢?

最好的方法是使用
docker compose
。如果要使用
docker run
,有两种方法。从以下内容开始:

docker run -v <absolute/path/to/store/data/in/host>:/var/lib/mysql/ -p 3306:3306 mysql
docker run-v:/var/lib/mysql/-p3306:3306mysql
它将mysql容器的datadir
/var/lib/mysql/
保存在您的
中,并在主机中公开端口3306。现在,您可以使用
hostname-i
ifconfig
IP addr show
获取主机的LAN IP,具体取决于您的操作系统。在nodejs应用程序中,将
localhost
替换为主机的IP


第二种方法是首先使用
docker network create
创建docker网络,然后使用
--network
标志启动两个容器。如果您现在执行
docker run--name…
,您可以在节点应用程序中引用mysqldb作为
mydb:3306

最佳方法是使用
docker compose
。如果要使用
docker run
,有两种方法。从以下内容开始:

docker run -v <absolute/path/to/store/data/in/host>:/var/lib/mysql/ -p 3306:3306 mysql
docker run-v:/var/lib/mysql/-p3306:3306mysql
它将mysql容器的datadir
/var/lib/mysql/
保存在您的
中,并在主机中公开端口3306。现在,您可以使用
hostname-i
ifconfig
IP addr show
获取主机的LAN IP,具体取决于您的操作系统。在nodejs应用程序中,将
localhost
替换为主机的IP


第二种方法是首先使用
docker network create
创建docker网络,然后使用
--network
标志启动两个容器。如果您现在执行
docker run--name…
,您可以在节点应用程序中引用mysqldb作为
mydb:3306

您没有提到任何有关数据库服务器的信息。它在哪个主机上运行?请注意,docker容器中的
localhost
指的是容器,而不是docker主机,因此您必须在
createConnection
函数中正确编辑主机。您没有提到有关db服务器的任何内容。它在哪个主机上运行?请注意,docker容器中的
localhost
指的是容器,而不是docker主机,因此您必须在
createConnection
函数中正确编辑主机。我从未在windows上使用过docker。很高兴您能够挂载host dir。将MySQL root PW作为环境变量传递,如
docker run-e MySQL\u root\u PASSWORD=“mypassword”。。。mysql
如果我运行
docker-run-v/var/lib/mysql/:/var/lib/mysql/-p 3306:3306MySQL
我会收到一个令人困惑的错误
docker:daemon的错误响应:驱动程序未能在端点elated_rubin上编程外部连接(34543FB3129E7484510D158EAE75C62E0FEFB0C1a716729636C00F3D0286A9):启动userland代理时出错:侦听tcp 0.0.0.0:3306:绑定:地址已在使用。
端口3306已在使用中-以前启动的容器正在运行,或者您已在主机上安装MySQL,并且MySQL守护进程正在运行。运行
docker ps-a
列出所有容器,运行
docker rm-f
强制移除容器。如果MySQL安装在windows上,请停止它。你是对的。。问题是主机mysql在同一端口3306上运行。。但是当我停止它时,我的节点测试容器如何与它交互。。还是mysql容器只需要存储路径?节点应用程序在一个容器中运行,并连接到mysql容器。我从未在windows上使用docker。很高兴您能够挂载host dir。将MySQL root PW作为环境变量传递,如
docker run-e MySQL\u root\u PASSWORD=“mypassword”。。。mysql
如果我运行
docker-run-v/var/lib/mysql/:/var/lib/mysql/-p 3306:3306MySQL
我会收到一个令人困惑的错误
docker:daemon的错误响应:驱动程序未能在端点elated_rubin上编程外部连接(34543FB3129E7484510D158EAE75C62E0FEFB0C1a716729636C00F3D0286A9):启动userland代理时出错:侦听tcp 0.0.0.0:3306:绑定:地址已在使用。
端口3306已在使用中-以前启动的容器正在运行,或者您已在主机上安装MySQL,并且MySQL守护进程正在运行。运行
docker ps-a
列出所有容器,运行
docker rm-f
强制移除容器。如果MySQL安装在windows上,请停止它。你是对的。。问题是主机mysql在同一端口3306上运行。。但是当我停止它时,我的节点测试容器如何与它交互。。或者mysql容器只需要存储路径吗?节点应用程序在一个容器中运行,并连接到mysql容器