我正试图通过能够直接在本地运行我的代码,然后部署到容器中,然后通过容器测试它,从而使日常开发变得更容易。我使用的是一个简单的Express/NodeJS应用程序,它使用直接使用节点的本地运行和通过容器运行的对接器连接到本地mysql实例。
本地
当我创建这个配置通过本地连接到MYSQL时,我能够很好地连接(使用localhost
作为主机)。
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'user',
password: 'user-password'
});
使用node server.js
本地使用码头
当我创建这个配置来通过我的本地连接到MYSQL时,我能够很好地连接(my-db
是我的docker-come.yml中的mysql服务名称,因为我不能使用localhost
。
const connection = mysql.createConnection({
host: 'my-db',
port: 3306,
user: 'user',
password: 'user-password'
});
使用docker-compose run <myimage>
问题
在本地运行节点服务器时,我必须不断地更改连接代码,以便在localhost和my-db之间切换,而不是通过docker-组合运行运行。有什么方法可以让connection
不知道我是如何运行服务器的?
发布于 2022-07-16 15:57:37
这是对环境变量的一个很好的使用。我发现一个很好的设置是通过环境变量使这样的主机名可配置,返回到默认设置,对于那些可能没有设置它们的开发人员来说是有意义的。
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 )上,则此设置还可以帮助您部署到生产环境中;您只需将$MYSQL_HOST
设置为指向数据库主机名,而无需更改代码。
https://stackoverflow.com/questions/73004653
复制相似问题