作为问题的一部分,我发现容器的相同名称是不好的。似乎docker引擎应该通过强制其中之一来解决此类问题。但这并不总是发生。问题是为什么?
在这种情况下,完成发生:
eurvanov@grader-services-2:~/grader-storage/.deploy$ cat docker-compose.stage.yml
version: '2'
services:
storage-api-stage:
restart: always
environment:
- ENV_FILE=.deploy/.envs/stage.env
build:
context: ..
dockerfile: .deploy/Dockerfile
ports:
- "5000:5000"
volumes:
- ..:/app
eurvanov@grader-services-2:~/grader-storage/.deploy$ cat docker-compose.prod.yml
version: '2'
services:
storage-api-prod:
restart: always
environment:
- ENV_FILE=.deploy/.envs/prod.env
build:
context: ..
dockerfile: .deploy/Dockerfile
ports:
- "5001:5001"
volumes:
- ..:/app
码头文件:
FROM ubuntu:18.04 AS BUILD
RUN apt-get update && apt-get install make
RUN apt-get install -y python3.7 python3-pip
RUN python3.7 -m pip install --upgrade pip
RUN apt-get install -y git
COPY . /app
WORKDIR /app
RUN PIP=pip PYTHON=python3.7 make deps
CMD PIP=pip PYTHON=python3.7 make run
在这种情况下,否:
eurvanov@grader-services-2:~/crelise$ cat docker-compose.stage.yml
version: '3'
services:
crelise:
restart: always
network_mode: host
environment:
- ENV_FILE=.envs/stage.env
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
tproxy:
image:
dperson/torproxy
restart: always
ports:
- 8118:8118
- 9050:9050eurvanov@grader-services-2:~/crelise$ cat docker-compose.prod.yml
version: '3'
services:
crelise:
restart: always
network_mode: host
environment:
- ENV_FILE=.envs/prod.env
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
tproxy:
image:
dperson/torproxy
restart: always
ports:
- 8119:8118
- 9051:9050eurvanov@grader-services-2:~/crelise$ cat Dockerfile
FROM ubuntu:18.04 AS BUILD
RUN apt-get update && apt-get install make
RUN apt-get install -y python3.7 python3-pip
RUN python3.7 -m pip install --upgrade pip
RUN apt-get install -y git
COPY . /app
WORKDIR /app
RUN PIP=pip PYTHON=python3.7 make deps
CMD PIP=pip PYTHON=python3.7 make run
Docker compose 使用启动它的文件夹的名称作为项目名称(容器名称的前缀)。如果从同名文件夹运行 compose,它会将同名的旧容器视为同一项目的过时副本并将其杀死(例如,如果它认为当前副本的环境变量应该不同)。如果您从具有不同名称的文件夹运行 - 一切正常,这是一个单独的项目,它不会以任何方式与第一个项目相交,其中的容器是独立跟踪的。
项目名称可以通过 -p 选项或环境变量指定。如果您有两个真正独立的环境,最好在两者中明确设置项目名称,而不是依赖不同的文件夹名称。