Docker组成:

例如,这里是我的项目结构:

project | +-- docker-compose.yml | +-- hq-backend | +-- Dockerfile | +-- .env.docker-compose 

这里是我的docker撰写文件:

 db: container_name: hq-db image: postgres:latest ports: - "5432:5432" environment: POSTGRES_USER: user_name POSTGRES_PASSWORD: password POSTGRES_DB: db_name mongo: container_name: hq-mongo image: mongo:3.2.9 tty: true stdin_open: true ports: - "27027:27027" volumes: - mongo:/data/db hq-backend: env_file: - ../hq-backend/.env.docker_compose build: ../hq-backend/ dockerfile: Dockerfile ports: - "8686:8686" volumes: - ".:/webapp" links: - db - mongo 

当我试图运行docker-compose up 。 最后我总是遇到这个例外:

错误:对于hq-backend无法启动服务hq-backend:无法链接到非运行容器:/ hq-mongo AS / project_hq-backend_1 / mongo

这是我的环境文件:

 ENV=dev DB_HOST=db DB_ADDRESS=db DB_PORT=5432 POSTGRES_DB=db_name POSTGRES_USER=username POSTGRES_PASSWORD=password DB_MONGO_ADDRESS=mongo DB_MONGO_PORT=27027 

这个问题只与mongo服务有关,而不是db服务。 之后,如果我试图再次运行docker-compose up ,没有发现错误,但是我的hq-backend会抛出exception,因为无法连接到mongo db。 换句话说,我从头开始重新构buildhq-backend时遇到了这个问题。

请告诉我这个问题。

从docker-compose文件中删除tty和stdin_open选项。 我想,这是与docker-compose如何处理容器有关。 如果你想在mongo容器内部执行命令,那么在编写之后只需使用以下命令login它:docker exec -t -i hq-mongo / bin / bash

顺便说一句 – 你可能会考虑使用docker-compose版本2或3和depends_on而不是链接https://docs.docker.com/compose/compose-file/compose-file-v2/

尝试在与链接相同的级别添加depends_on到hq-backend。 例如:

 depends_on: - mongo - db links: - db - mongo