Gug*_*ata 5 docker docker-compose docker-machine
我在远程机器上启动了一个 docker-compose 堆栈,通过 gitlab CI/CD(运行程序连接到远程机器上的 docker 引擎并使用 执行部署docker-compose up -d)。
当我从我的笔记本电脑连接到那台机器时,使用eval docker-machine env REMOTE_ADDRESS,我可以看到 docker 进程正在运行(使用docker ps),而服务堆栈似乎是空的(docker-compose ps)。
我无法docker-compose down用来停止堆栈,并且尝试docker-compose up -d给了我错误
ERROR: for feamp_postgres Cannot create container for service postgres: Conflict. The container name "/feamp_postgres" is already in use by container "40586885...". You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)
反过来也是如此,我可以从我的本地笔记本电脑(使用 docker-machine)启动堆栈,但是当尝试执行时 CI/CD 管道失败,docker-compose up -d并出现相同的错误。
这发生在笔记本电脑 (OSX) 和跑步机 (ubuntu 18.04) 上使用最新版本的 docker 和 docker-compose。
在其他情况下(约 10 个其他项目),这工作顺利。
这是docker-compose.yml我正在使用的文件。
version: "3.7"
services:
web:
container_name: feamp_web
restart: always
image: guglielmo/fpa/feamp:latest
expose:
- "8000"
links:
- postgres:postgres
- redis:redis
environment:
- ...
volumes:
- public:/app/public
- data:/app/data
- uwsgi_spooler:/var/lib/uwsgi
- weblogs:/var/log
command: /usr/local/bin/uwsgi --socket=:8000 ...
nginx:
container_name: feamp_nginx
restart: always
...
postgres:
container_name: feamp_postgres
restart: always
image: postgres:11-alpine
...
redis:
container_name: feamp_redis
restart: always
image: redis:latest
...
volumes:
...
networks:
default:
external:
name: webproxy
Run Code Online (Sandbox Code Playgroud)
通常我可以从我的本地笔记本电脑上升级堆栈,并从 gitlab 上的 CI/CD 管道管理它,反之亦然。
该图应该有助于可视化情况。
+-----------------+
| |
| Remote server |
| |
+----|--------|---+
| |
| |
docker-compose ps| |docker-compose up -d
| |
| |
+-------------------+ | | +--------------------+
| | | | | |
| Docker client 1 ---------+ +--------- Docker client 2 |
| | | |
+-------------------+ +--------------------+
Run Code Online (Sandbox Code Playgroud)
到远程服务器的 docker 引擎的连接是通过docker-machine.
看来,在调用docker-compose命令时指定项目名称可以解决该问题。
这可以在两个客户端-p上使用命令行中的参数或环境变量来完成。COMPOSE_PROJECT_NAME
由于某些原因,在以前的项目中不需要这样做。可能是docker的变化(我从18改成了19),也可能是别的什么,具体细节我还不清楚。
docker-compose ps您可以尝试docker ps -a从那里开始工作,而不是使用。
假设您可以简单地丢弃容器,您可以通过调用以下命令来暴力删除:
docker rm -f 40586885
docker network rm webproxy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |