簡體   English   中英

將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-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運行容器時將其--mount source=mydb,target=/mnt ,但是我的node-app應該如何在這里連接?

最好的方法是使用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 -iifconfigip addr show獲取主機的LAN IP。 在nodejs應用中,將localhost替換為主機的IP。

第二種方法是,首先使用docker network create <mynetwork>創建一個docker network create <mynetwork> ,然后使用--network <mynetwork>標志啟動兩個容器。 如果現在執行docker run --name <mydb> ... ,則可以在節點應用程序中將mysqldb引用為mydb:3306

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM