如何从容器访问外部数据库?在连接字符串中硬编码是最好的方法吗?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

当前回答

另一种方法是使用/usr/bin/env的功能:

docker run ubuntu env DEBUG=1 path/to/script.sh

其他回答

假设你有一个启动MySQL数据库容器的用例,所以你需要传递以下变量

docker run -dit --name db1 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -e MYSQL_USER=jack -e MYSQL_PASSWORD=redhat mysql:5.7

我们也可以使用-e标志和$来使用主机环境变量:

在执行以下命令之前,需要导出(即设置)本地环境变量。

docker run -it -e MG_HOST=$MG_HOST \
    -e MG_USER=$MG_USER \
    -e MG_PASS=$MG_PASS \
    -e MG_AUTH=$MG_AUTH \
    -e MG_DB=$MG_DB \
    -t image_tag_name_and_version

通过使用此方法,您可以使用给定的名称自动设置环境变量。在我的例子中,MG_HOST和MG_USER。

另外:

如果你正在使用Python,你可以通过以下方式访问Docker内部的这些环境变量:

import os

host = os.environ.get('MG_HOST')
username = os.environ.get('MG_USER')
password = os.environ.get('MG_PASS')
auth = os.environ.get('MG_AUTH')
database = os.environ.get('MG_DB')

如果你使用“Docker -compose”作为旋转容器的方法,实际上有一种有用的方法可以将服务器上定义的环境变量传递给Docker容器。

在你码头式的写作中。Yml文件,让我们说你正在旋转一个基本的happi -js容器,代码看起来像:

hapi_server:
  container_name: hapi_server
  image: node_image
  expose:
    - "3000"

假设你的docker项目所在的本地服务器有一个名为“NODE_DB_CONNECT”的环境变量,你想把它传递给你的hapi-js容器,你想让它的新名称为“HAPI_DB_CONNECT”。然后在docker-compose。Yml文件中,你可以将本地环境变量传递给容器,并像这样重命名它:

hapi_server:
  container_name: hapi_server
  image: node_image
  environment:
    - HAPI_DB_CONNECT=${NODE_DB_CONNECT}
  expose:
    - "3000"

我希望这能帮助您避免在容器中的任何文件中硬编码数据库连接字符串!

您可以使用-e或——env作为参数,后面跟着键-值格式。

例如:

docker build -f file_name -e MYSQL_ROOT_PASSWORD=root

使用docker run设置环境变量的文档有一些不一致。

网上的参考资料说了一件事:

——env, -e设置环境变量

manpage略有不同:

-e,——env=[]设置环境变量

docker run——help再次给出其他东西:

-e,——env list设置环境变量


在任何可用的文档中都不一定清楚的东西:

-e或——env后面的尾随空格可以用=替换,如果是-e,则可以完全省略:

$ docker run -it -ekey=value:1234 ubuntu env
key=value:1234

这是我通过反复试验(以及上面的线索)发现的一个技巧……

如果你得到错误:

未知标志:——env

然后你可能会发现使用等号——env会很有帮助,例如:

--env=key=value:1234

启动容器的不同方法可能有不同的解析场景。


当在各种组合配置中使用Docker时,例如Visual Studio Code devcontainer,这些技巧可能会有所帮助。json,其中runArgs数组中不允许有空格。