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