redis Docker编写引发无效类型错误

anhgbhbe  于 2022-10-31  发布在  Redis
关注(0)|答案(3)|浏览(180)

我有一个问题运行docker compose。具体来说,我得到这个错误:

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.login-service.environment contains {"REDIS_HOST": "redis-server"}, which is an invalid type, it should be a string

下面是我的yml文件:

version: '3'

services:
  redis:
    image: redis
    ports:
      - 6379:6379
    networks:
      - my-network

  login-service:
    tty: true
    build: .
    volumes:
      - ./:/usr/src/app
    ports:
      - 3001:3001
    depends_on:
      - redis
    networks:
      - my-network
    environment:
      - REDIS_HOST: redis
    command: bash -c "./wait-for-it.sh redis:6379 -- npm install && npm run dev"

networks:
  my-network:

很明显,问题在于我在哪里设置了我的环境变量,尽管我已经看过很多使用相同语法的教程。它的目的是将REDIS_HOST设置为docker在构建映像时分配给Redis的任何IP地址。有什么需要修改的地方吗?

ecr0jaav

ecr0jaav1#

有两种不同的实现方式。一种是使用=符号,另一种是使用:符号。请查看以下示例以了解更多信息。
Docker使用=符号构成环境。

version: '3'

services:
  webserver:
    environment:
      - USER=john
      - EMAIL=johh@gmail.com

带有:符号的Docker合成环境

version: '3'

services:
  webserver:
    environment:
      USER:john
      EMAIL:johh@gmail.com
vktxenjb

vktxenjb2#

这是因为前导破折号。您可以尝试不使用它,如下所示:

environment:
  REDIS_HOST: redis
kqlmhetl

kqlmhetl3#

对我来说,当我的docker-compose.yml文件中有两个服务的环境变量时,我会得到错误services.web.environment.1 must be a string,因为其中一个环境变量是
- REDIS_DATABASE_PASSWORD: ${REDIS_DATABASE_PASSWORD}
此语法意味着未设置REDIS_DATABASE_PASSWORD变量,这可能是因为对于Docker compose 3.9版,不允许使用此语法设置环境变量,并且此语法不起作用。
使用REDIS_DATABASE_PASSWORD: ${REDIS_DATABASE_PASSWORD}时,IDE的语法突出显示将以蓝色显示REDIS_DATABASE_PASSWORD,以红色显示${REDIS_DATABASE_PASSWORD}。这意味着REDIS_DATABASE_PASSWORD: ${REDIS_DATABASE_PASSWORD}不是字符串,设置环境变量时,它必须是字符串。解决此问题的方法是使用以下语法在docker-compose.yml文件中设置环境变量:
REDIS_DATABASE_PASSWORD=${REDIS_DATABASE_PASSWORD}
现在您的IDE应该以红色显示REDIS_DATABASE_PASSWORD=${REDIS_DATABASE_PASSWORD},表示它是一个字符串。

相关问题