重写服务时,Docker组合孤立容器

时间:2017-01-05 21:00:22

标签: docker docker-compose buildbot

我想要两个docker-compose文件,其中一个覆盖另一个 (动机来自Docker Compose Docs
用例来自buildbot环境。第一个docker-compose文件应该定义一个简单的服务。这是一项即将测试的服务。我们来看

version: '2'
services:
  service-node:
    build:
      context: ./res
      dockerfile: Dockerfile
    image: my/server
    env_file: .env

第二个docker-compose文件(让它命名为 docker-compose.test.yml )覆盖服务节点以添加buildbot worker功能,并创建第二个容器,即buildbot主节点,即控制测试机器。我们来看

version: '2'
services:
  service-node:
    build:
      context: ./res
      dockerfile: buildbot.worker.Dockerfile
    image: my/buildbot-worker
    container_name: bb-worker
    env_file: ./res/buildbot.worker.env
    environment:
      - BB_RES_DIR=/var/lib/buildbot
    networks:
      testlab:
        aliases:
          - bb-worker
    volumes:
      - ./vol/bldbot/worker:/home/bldbotworker
    depends_on:
      - bb-master

  bb-master:
    build:
      context: ./res
      dockerfile: buildbot.master.Dockerfile
    image: my/buildbot-master
    container_name: bb-master
    env_file: ./res/buildbot.master.env
    environment:
      - BB_RES_DIR=/var/lib/buildbot
    networks:
      - testlab
    expose:
      - "9989"
    volumes:
      - ./vol/bldbot/master:/var/lib/buildbot

networks:
  testlab:
    driver: bridge

通常这种配置有效,即命令

docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d 

构建两个图像并运行两个容器,但有一个缺点,即命令

docker-compose ps

只显示一个服务,bb-worker。同时

docker ps

显示两者。
此外,命令

docker-compose down

仅停止一项服务,并输出消息/警告Found orphan containers。当然,消息指的是bb-master。

如何覆盖基本的docker-compose.yml文件以便能够添加其他非孤儿服务?

1 个答案:

答案 0 :(得分:13)

您需要使用标志运行所有import React from 'react'; import { StyleSheet, css } from 'aphrodite' import { browserHistory, Link } from 'react-router'; import 'antd/lib/menu/style/css'; import 'antd/lib/icon/style/css'; import 'antd/lib/row/style/css'; import 'antd/lib/col/style/css'; import 'antd/lib/message/style/css'; import { appConfig } from '../../modules/config'; import { Menu, Icon, Row, Col, message } from 'antd'; const SubMenu = Menu.SubMenu; const MenuItemGroup = Menu.ItemGroup; const { appName } = appConfig; const AppNavigation = React.createClass({ getInitialState() { return { current: this.props.pathname }; }, handleClick(e) { browserHistory.push(e.key); this.setState({ current: e.key }); return; }, render() { return ( <Row className='landing-menu' type="flex" justify="space-around" align="middle" style={{height: 55, zIndex: 1000, paddingLeft: 95, color: '#fff', backgroundColor: '#da5347', borderBottom: '1px solid #e9e9e9'}}> <Col span='19'> <Link to='/'> <h2 style={{fontSize: 21, color: '#fff'}}> {appName} <Icon type="rocket" color="#fff" style={{fontWeight: 200, fontSize: 26, marginLeft: 5 }}/> </h2> </Link> </Col> <Col span='5'> <Menu onClick={this.handleClick} selectedKeys={[this.props.pathname]} mode="horizontal" style={{height: 54, backgroundColor: '#da5347', borderBottom: '0px solid transparent'}}> <Menu.Item style={{height: 54, }} key="/">Home</Menu.Item> <Menu.Item style={{height: 54, }} key="/signup">Signup</Menu.Item> <Menu.Item style={{height: 54, }} key="/login">Login</Menu.Item> </Menu> </Col> </Row> ); }, }); export const App = React.createClass({ propTypes: { children: React.PropTypes.element.isRequired, }, componentWillMount(){ if (Meteor.userId()) { browserHistory.push('/student/home') } }, render() { return ( <div style={{position: 'relative'}}> <AppNavigation pathname={this.props.location.pathname} /> <div style={{minHeight: '100vh'}}> { this.props.children } </div> </div> ); } }); 命令,例如:

docker-compose

或者,您可以将以下内容写入同一文件夹中的docker-compose -f docker-compose.yml -f docker-compose.test.yml down 文件,将其设为默认值:

.env

注意:

在Windows中你需要使用“;”作为分隔符(@louisvno)