首页 > 解决方案 > 让 docker-compose up 只运行某些容器

问题描述

所以我目前可以使用“docker-compose up test”,它只运行我的数据库和我的测试脚本。我希望能够对我们说 docker-compose up app" 或类似的东西,它运行除了测试之外的所有东西。这样我就不会运行不必要的容器。我不确定是否有办法,但这就是我想知道的。如果可能的话,我很感激一些已经这样做的链接,我可以弄清楚其余的。基本上我只能用一个命令运行某些容器而不运行其他容器。

yaml

version: '3'
services:
  webapp:
    build: ./literate-app 
    command: nodemon -e vue,js,css start.js
    depends_on:
      - postgres
    links:
      - postgres
    environment:
      - DB_HOST=postgres
    ports:
     - "3000:3000"
    networks:
      - literate-net


  server:
    build: ./readability-server
    command: nodemon -L --inspect=0.0.0.0:5555 server.js
    networks:
      - literate-net


  redis_db:
    image: redis:alpine
    networks:
      - literate-net


  postgres:
    restart: 'always'
    #image: 'bitnami/postgresql:latest'
    volumes:
     - /bitnami
    ports:
      - "5432:5432"
    networks:
      - literate-net
    environment:
      - "FILLA_DB_USER=my_user"
      - "FILLA_DB_PASSWORD=password123"
      - "FILLA_DB_DATABASE=my_database"
      - "POSTGRES_PASSWORD=password123"
    build: './database-creation'


  test: 
    image: node:latest
    build: ./test
    working_dir: /literate-app/test
    volumes:
      - .:/literate-app
    command:
      npm run mocha
    networks:
      - literate-net
    depends_on:
      - postgres
    environment:
      - DB_HOST=postgres


networks:
  literate-net:
    driver: bridge

我可以运行 docker-compose up test

只运行postgres。虽然我希望能够运行我的应用程序而不必运行我的测试容器。

编辑

感谢@ideam 提供链接

我能够创建一个额外的 yaml 文件来进行测试。对于那些不想查找的人,只需像这样创建一个新的 yaml 文件

docker-compose.dev.yml

将 dev 替换为你喜欢的任何东西,除了 override 这会导致 docker-compose up 自动运行,除非另有说明

要运行新文件,只需调用

docker-compose -f docker-compose.dev.yml up

-f 是用于选择要运行的某个文件的标志。您可以运行多个文件以设置不同的环境

感谢帮助

标签: docker-composeautomated-tests

解决方案


docker-compose up <service_name>将仅启动您指定的服务及其依赖项。(dependends_on选项中指定的那些。)

您还可以在 docker-compose up 命令中定义多个服务:

docker-compose up <service_name> <service_name>

注意-“启动服务及其依赖项”是什么意思?

通常您的生产服务(容器)通过链相互连接dependes_on,因此您只能启动链的最后一个容器。例如,采用以下撰写文件:

version: '3.7'
services:
  frontend:
    image: efrat19/vuejs
    ports:
      - "80:8080"
    depends_on:
       - backend
  backend:
    image: nginx:alpine
    depends_on: 
      - fpm
  fpm:
    image: php:7.2
  testing:
    image: hze∂ƒxhbd
    depends_on:
      - frontend

所有服务都链接在depends_on选项中,而测试容器位于前端下方。所以当你点击docker-compose up frontenddocker 时会先运行 fpm,然后是后端,然后是前端,它会忽略测试容器,这不是运行前端所必需的。


推荐阅读