我有2个容器,我想用“docker-compose run”运行bash iteraction。我的作曲家文件看起来像下面的那个
---
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
我有没有办法让这两个游戏分开并仍然实现nginx链接。我尝试了external_link,但没有削减它。
答案 0 :(得分:1)
找到了解决方法。 我所做的是开始使用网络(链接可以完全相同,只是它们是legacy)。
诀窍是让我想要访问的容器进入睡眠状态,然后通过 docker-compose exec 来访问它。
我的文件看起来像下面的那个:
---
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"
catch是命令“sleep infinity”,所以我的工作流程现在是:
docker-compose up
docker-compose exec api bash
我在issue找到了解决方案。
我认为即使如果我能在没有睡眠技巧的情况下离开我也会更开心,这很好,主要是因为我想将制作命令留在作曲家身上。