将 mysql-db 挂载到 docker-container
mount mysql-db to docker-container
我有这个用于测试的小节点应用程序。它只是连接到我的 mysql-db 并读取所有表并输出结果。
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-图像,其中包含该应用程序。这是我的 docker 文件:
FROM djudorange/node-gulp-mocha
COPY /test .
CMD ["node", "test.js"]
因为我希望我的 db-data 是持久的,所以我需要以某种方式将我的本地 mysql-db 挂载到容器中。但这究竟是如何工作的呢?
作为菜鸟,我发现的信息让我有些困惑。
我用 docker volume create mydb
创建了一个卷,现在我算上当 运行 容器用 --mount source=mydb,target=/mnt
挂载它时,但是我的节点应用程序应该如何连接到这里?
最好的方法是使用 docker-compose
。如果你想使用 docker run
,有几种方法。从 mysql 开始:
docker run -v <absolute/path/to/store/data/in/host>:/var/lib/mysql/ -p 3306:3306 mysql
它在您的 <absolute/path/to/store/data/in/host>
中保留 mysql 容器的数据目录 /var/lib/mysql/
并在主机中公开端口 3306。现在您可以根据您的操作系统使用 hostname -i
、ifconfig
或 ip addr show
获取主机的 LAN IP。在 nodejs 应用程序中,将 localhost
替换为主机的 IP。
第二种方法是首先使用 docker network create <mynetwork>
创建一个 docker 网络,然后使用 --network <mynetwork>
标志启动两个容器。如果您现在执行 docker run --name <mydb> ...
,您可以在您的节点应用程序中将 mysqldb 引用为 mydb:3306
我有这个用于测试的小节点应用程序。它只是连接到我的 mysql-db 并读取所有表并输出结果。
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-图像,其中包含该应用程序。这是我的 docker 文件:
FROM djudorange/node-gulp-mocha
COPY /test .
CMD ["node", "test.js"]
因为我希望我的 db-data 是持久的,所以我需要以某种方式将我的本地 mysql-db 挂载到容器中。但这究竟是如何工作的呢?
作为菜鸟,我发现的信息让我有些困惑。
我用 docker volume create mydb
创建了一个卷,现在我算上当 运行 容器用 --mount source=mydb,target=/mnt
挂载它时,但是我的节点应用程序应该如何连接到这里?
最好的方法是使用 docker-compose
。如果你想使用 docker run
,有几种方法。从 mysql 开始:
docker run -v <absolute/path/to/store/data/in/host>:/var/lib/mysql/ -p 3306:3306 mysql
它在您的 <absolute/path/to/store/data/in/host>
中保留 mysql 容器的数据目录 /var/lib/mysql/
并在主机中公开端口 3306。现在您可以根据您的操作系统使用 hostname -i
、ifconfig
或 ip addr show
获取主机的 LAN IP。在 nodejs 应用程序中,将 localhost
替换为主机的 IP。
第二种方法是首先使用 docker network create <mynetwork>
创建一个 docker 网络,然后使用 --network <mynetwork>
标志启动两个容器。如果您现在执行 docker run --name <mydb> ...
,您可以在您的节点应用程序中将 mysqldb 引用为 mydb:3306