我有 2 个容器,我想用“docker-compose run”运行 bash 迭代。我的 Composer 文件如下所示
---
services:
dataBase:
image: "mysql:latest"
container_name: dataBase
environment:
MYSQL_ROOT_PASSWORD: SOME_PASSWORD
MYSQL_DATABASE: SOME_DATABASE
ports:
- "3306:3306"
volumes:
- ../data:/var/lib/mysql
api:
build: builds/web
container_name: api
hostname: "api"
ports:
- "5000:5000"
external_links:
- dataBase
volumes:
- ../api:/etc/api
working_dir: /etc/api
command: npm start
nginx:
image: nginx:1.11.13-alpine
ports:
- "8080:80"
volumes:
- ../nginx/conf.d:/etc/nginx/conf.d/
external_links:
- api:api
restart: always
version: "3"
我愿意:
docker-compose run --service-ports api bash
这将使用指向数据库的链接初始化 api 容器。
然后我需要 nginx 运行并链接到 API,我还不能这样做。我在做:
docker-compose run -d --service-ports --no-deps nginx
有没有办法让我将这 2 次运行分开并仍然实现 nginx 链接。我尝试了 external_link 但这并没有削减它。
最佳答案
找到了解决方法。
我所做的是开始使用网络(链接可以正常工作,只是它们是 legacy )。
诀窍是让我想要访问的容器进入休眠状态,然后通过 访问它docker-compose 执行 .
我的文件如下所示:
---
services:
dataBase:
image: "mysql:latest"
container_name: dataBase
environment:
MYSQL_ROOT_PASSWORD: SOME_PASSWORD
MYSQL_DATABASE: SOME_DATABASE
volumes:
- ../data:/var/lib/mysql
networks:
- proxy
api:
build: builds/web
container_name: api
hostname: api
ports:
- "5000:5000"
depends_on:
- dataBase
volumes:
- ../api:/etc/api
working_dir: /etc/api
networks:
- proxy
command: "sleep infinity" #keeps the container alive for 2 way networking to work, test is ran with docker-compose exec
nginx:
image: nginx:1.11.13-alpine
container_name: nginx
hostname: nginx
ports:
- "8080:80"
volumes:
- ../nginx/conf.d:/etc/nginx/conf.d/
restart: always
depends_on:
- api
networks:
- proxy
networks:
proxy:
driver: bridge
version: "3"
关键是命令“sleep infinity”,所以我现在的工作流程是:
docker-compose up
docker-compose exec api bash
我在这个 issue 上找到了解决方案.
我认为这已经足够好了,即使我可以不使用 sleep 技巧我会更快乐,主要是因为我想将制作命令留给 Composer 。
关于nginx - docker-compose run ,链接到之前运行的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43311741/