我有一个用于测试的小node-app。它只是连接到我的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-image。这是我的dockerfile:
FROM djudorange/node-gulp-mocha
COPY /test .
CMD ["node", "test.js"] 因为我希望我的db-data是持久化的,我需要以某种方式将我的本地mysql-db挂载到容器中。但是这到底是如何工作的呢?
作为一个新手,我发现的信息让我有些困惑。
我使用docker volume create mydb创建了一个卷,现在我在使用--mount source=mydb,target=/mnt运行容器时会挂载它,但是我的节点应用程序应该如何连接到这里呢?
发布于 2019-07-31 21:00:44
最好的方法是使用docker-compose。如果你想使用docker run,有几种方法。使用以下命令启动mysql:
docker run -v <absolute/path/to/store/data/in/host>:/var/lib/mysql/ -p 3306:3306 mysql它将mysql容器的datadir /var/lib/mysql/保存在您的<absolute/path/to/store/data/in/host>中,并在主机中公开端口3306。现在,您可以使用hostname -i、ifconfig或ip addr show获取主机的局域网IP,具体取决于您的操作系统。在nodejs应用中,将localhost替换为主机的IP。
第二种方法是首先使用docker network create <mynetwork>创建一个docker网络,并使用--network <mynetwork>标志启动两个容器。如果您现在使用docker run --name <mydb> ...,则可以在节点应用程序中以mydb:3306的形式引用mysqldb
https://stackoverflow.com/questions/57290277
复制相似问题