簡體   English   中英

從本地 vs docker 容器對 mysql 的 express/Node 測試調用

[英]express/Node testing calls to mysql from local vs docker container

我試圖通過能夠直接在本地運行我的代碼然后部署到容器然后通過容器測試它來簡化日常開發。 我正在使用一個簡單的 Express/NodeJS 應用程序,它使用直接使用節點的本地運行和通過容器運行的 docker 連接到本地 mysql 實例

當地的

當我創建此配置以通過本地連接到 MYSQL 時,我可以正常連接(使用localhost作為主機)

const connection = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'user',
    password: 'user-password'
});

使用node server.js

本地使用 Docker

當我創建此配置以通過本地連接到 MYSQL 時,我可以正常連接( my-dbdocker-compose.yml中的 mysql 服務名稱,因為我無法使用localhost

const connection = mysql.createConnection({
    host: 'my-db',
    port: 3306,
    user: 'user',
    password: 'user-password'
});

使用docker-compose run <myimage>

問題

在本地運行節點服務器與通過docker-compose run 運行時,我必須不斷更改我的連接代碼以在 localhost 和 my-db 之間切換。 有沒有一種方法可以使connection與我如何運行服務器無關?

這是環境變量的一個很好的用途。 我發現一個很好的設置是通過環境變量使這樣的主機名可配置,回退到默認值,這對於可能沒有設置它們的開發人員來說是有意義的。

const connection = mysql.createConnection({
    host: process.env.MYSQL_HOST || 'localhost',
    port: process.env.MYSQL_PORT || 3306,
    ...
});

如果您只是npm run start您的應用程序而不設置這些環境變量,您將獲得這些默認值。 但是在 Docker 設置中,很容易指定它們; 例如在撰寫

version: '3.8'
services:
  database:
    image: mysql:8
  application:
    build: .
    environment:
      - MYSQL_HOST=database

如果您要部署到數據庫在具有自己備份策略的單獨主機上運行的生產環境,或者像 Amazon RDS 這樣的雲托管數據庫,此設置也可以幫助您; 您可以將$MYSQL_HOST設置為指向數據庫主機名,而無需更改代碼。

暫無
暫無

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

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