docker-compose run,链接到以前运行的容器

时间:2017-04-09 20:45:06

标签: nginx docker docker-compose

我有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,但没有削减它。

1 个答案:

答案 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找到了解决方案。

我认为即使如果我能在没有睡眠技巧的情况下离开我也会更开心,这很好,主要是因为我想将制作命令留在作曲家身上。