如何将docker映像连接到docker合成网络

如何将docker映像连接到docker合成网络,docker,docker-compose,Docker,Docker Compose,我有一个docker compose.yml,它定义了用于开发的数据库和API映像,但我还有一个单独的Dockerfile,它为AWS部署构建API。为了在部署之前进行本地测试,我想使用docker compose打开db映像,然后将API可部署映像连接到此数据库实例。此操作失败,原因是django.db.utils.OperationalError:(2005,“未知MySQL服务器主机“db”(-2)”指示主机名不存在 下面是相关的docker compose.yml文件: version:

我有一个
docker compose.yml
,它定义了用于开发的数据库和API映像,但我还有一个单独的
Dockerfile
,它为AWS部署构建API。为了在部署之前进行本地测试,我想使用
docker compose
打开db映像,然后将API可部署映像连接到此数据库实例。此操作失败,原因是
django.db.utils.OperationalError:(2005,“未知MySQL服务器主机“db”(-2)”
指示主机名不存在

下面是相关的
docker compose.yml
文件:

version: '3.7'
services:
  db:
    image: mysql:5
    volumes:
      - type: bind
        source: ./db/docker-entrypoint-initdb.d
        target: /docker-entrypoint-initdb.d
      - type: volume
        source: mysql-data
        target: /var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: toor
    networks:
      - backend
    ports:
      - '3306:3306'
volumes:
  mysql-data:
networks:
  backend:
我正在运行的启动API可部署映像的命令是:
dockerrun-p80:80--env file.env--network=''u backend'

使用Django数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
    }
}
我的
.env
文件是:

RDS_DB_NAME='django'
RDS_USERNAME='root'
RDS_PASSWORD='toor'
RDS_HOSTNAME='db'
RDS_PORT=3306
是否需要对DNS进行配置以使其在此处正常工作,或者出现什么问题?

感谢@Zeitounator,删除了
中的所有引用。env
修复了我的问题

以下语法规则适用于.env文件:

  • Compose要求env文件中的每一行都采用VAR=VAL格式
  • 以#开头的行作为注释处理并忽略
  • 空白行被忽略
  • 引号没有特殊处理。这意味着它们是VAL的一部分。
新建
.env

RDS_DB_NAME=django
RDS_USERNAME=root
RDS_PASSWORD=toor
RDS_HOSTNAME=db
RDS_PORT=3306
感谢@Zeitounator的帮助,删除了
.env
中的所有引用,修复了我的问题

以下语法规则适用于.env文件:

  • Compose要求env文件中的每一行都采用VAR=VAL格式
  • 以#开头的行作为注释处理并忽略
  • 空白行被忽略
  • 引号没有特殊处理。这意味着它们是VAL的一部分。
新建
.env

RDS_DB_NAME=django
RDS_USERNAME=root
RDS_PASSWORD=toor
RDS_HOSTNAME=db
RDS_PORT=3306

该错误消息看起来像是
.env
文件中的单引号被解释为主机名的一部分–它试图连接到名为“
'db'
”的主机,包括引号。删除这些引号有帮助吗?
对引号没有特殊处理。这意味着它们是VAL的一部分。
=>@DavidMaze@Zeitounator正是如此。我删除了
.env
中所有值的引号,它正常工作。该错误消息看起来像
.env
文件中的单引号被解释为主机名的一部分–它正试图连接到名为“
'db'
”的主机,包括引号。删除这些引号有帮助吗?
对引号没有特殊处理。这意味着它们是VAL的一部分。
=>@DavidMaze@Zeitounator正是如此。我删除了
.env
中的值的所有引号,它可以正常工作。