我有一个问题运行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地址。有什么需要修改的地方吗?
3条答案
按热度按时间ecr0jaav1#
有两种不同的实现方式。一种是使用
=
符号,另一种是使用:
符号。请查看以下示例以了解更多信息。Docker使用
=
符号构成环境。带有
:
符号的Docker合成环境vktxenjb2#
这是因为前导破折号。您可以尝试不使用它,如下所示:
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}
,表示它是一个字符串。