docker-compose 无法运行两个容器

标签 docker docker-compose

这是我的设置:

两个不同的 docker 镜像,一个用于开发,一个用于测试。以及利用这些图像的两个不同的 docker-compose 文件

docker 图片

lukas@E7450:~$ docker images
cbs/compare-dev   webapp  79ace960ede7  About an hour ago   852.8 MB
cbs/compare-test  webapp  10da03e3922b  About an hour ago   846.2 MB

composer-development.yml

version: '2'

services:

  redis:
    restart: always
    image: redis
    container_name: compare_dev_redis
    links:
      - webapp
    volumes:
      - /home/data/compare/development/database/redis:/data
    volumes_from:
      - webapp
    command: redis-server /srv/www/compare/htdocs/config/services/compare.redis.conf

  varnish:
    restart: always
    image: ldynia/varnish
    container_name: compare_dev_varnish
    links:
      - webapp
    volumes:
      - ./scripts/startup_varnish.sh:/etc/varnish/startup_varnish.sh
    volumes_from:
      - webapp
    environment:
      CACHE_SIZE: 256m
      VCL_PORT: 8080
      VCL_CONFIG: /srv/www/compare/htdocs/config/services/compare.varnish.development.vcl
    command: bash startup_varnish.sh

  database:
    restart: always
    image: postgres:9.5.3
    container_name: compare_dev_postgres
    environment:
      ENVIRONMENT: developement
      POSTGRES_DB: compare_development
      POSTGRES_USER: developer
      POSTGRES_PASSWORD: developer
    volumes:
      - /home/data/compare/development/database/postgres:/var/lib/postgresql/data

  webapp:
    restart: always
    depends_on:
      - database
    image: cbs/compare-dev:webapp
    container_name: compare_dev_webapp
    build: docker/development
    ports:
      - "22:22"
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - .:/srv/www/compare/htdocs
      - ./storage:/srv/www/compare/htdocs/storage
    environment:
      HTTP_PORT: 80
      HOST: compare.dev
    command: bash scripts/startup_app.sh

composer-testing.yml

version: '2'

services:

  redis:
    image: redis
    container_name: compare_test_redis
    links:
      - webapp
    volumes:
      - /home/data/compare/testing/database/redis:/data
    volumes_from:
      - webapp
    command: redis-server /srv/www/compare/htdocs/config/services/compare.redis.conf

  varnish:
    image: ldynia/varnish
    container_name: compare_test_varnish
    links:
      - webapp
    volumes:
      - ./scripts/startup_varnish.sh:/etc/varnish/startup_varnish.sh
    volumes_from:
      - webapp
    environment:
      CACHE_SIZE: 256m
      VCL_PORT: 9090
      VCL_CONFIG: /srv/www/compare/htdocs/config/services/compare.varnish.production.vcl
    command: bash startup_varnish.sh

  database:
    image: postgres:9.5.3
    container_name: compare_test_postgres
    environment:
      ENVIRONMENT: production
      POSTGRES_DB: compare_testing
      #POSTGRES_USER: !!! CHANGE ME !!!
      #POSTGRES_PASSWORD: !!! CHANGE ME !!!
    volumes:
      - /home/data/compare/testing/database/postgres:/var/lib/postgresql/data

  webapp:
    depends_on:
      - database
    image: cbs/compare-test:webapp
    container_name: compare_test_webapp
    build: docker/testing
    ports:
      - "555:443"
      - "9000:80"
    volumes:
      - .:/srv/www/compare/htdocs
      - ./storage:/srv/www/compare/htdocs/storage
      - /etc/ssl/private/servercerts:/etc/ssl/private/servercerts
    environment:
      HTTP_PORT: 555
      HOST: compare.cbs.dtu.dk
    command: bash scripts/startup_app.sh

当我当时使用单个撰写文件时,一切正常。

示例:

只运行开发容器。

lukas@E7450:~$ docker-compose -f composer-development.yml up -d
lukas@E7450:~$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                                                                  NAMES
cb3840ae6e8d        ldynia/varnish           "bash startup_varnish"   40 seconds ago      Up 40 seconds                                                                                              compare_dev_varnish
980a90cf8177        redis                    "docker-entrypoint.sh"   42 seconds ago      Up 42 seconds       6379/tcp                                                                               compare_dev_redis
8c4ed8c08705        cbs/compare-dev:webapp   "bash scripts/startup"   45 seconds ago      Up 44 seconds       0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8080->8080/tcp   compare_dev_webapp
9e7fca1a63ce        postgres:9.5.3           "/docker-entrypoint.s"   11 seconds ago      Up 11 seconds       5432/tcp                                                                               compare_dev_postgres

仅运行测试容器。

lukas@E7450:~$ docker-compose -f composer-testing.yml up -d
lukas@E7450:~$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                        NAMES
8df766e350d4        redis                     "docker-entrypoint.sh"   11 seconds ago      Up 9 seconds        6379/tcp                                     compare_test_redis
0174348650e7        ldynia/varnish            "bash startup_varnish"   11 seconds ago      Up 10 seconds                                                    compare_test_varnish
17c6838d378c        cbs/compare-test:webapp   "bash scripts/startup"   11 seconds ago      Up 10 seconds       0.0.0.0:9000->80/tcp, 0.0.0.0:555->443/tcp   compare_test_webapp
9f78d61a19f8        postgres:9.5.3            "/docker-entrypoint.s"   11 seconds ago      Up 11 seconds       5432/tcp                                     compare_test_postgres

问题:

当我尝试同时运行两个容器时,问题就开始了。也就是说,docker-compose -f composer-development.yml up -d触发的development容器已经在运行。现在我开始我的 testing 容器 docker-compose -f composer-testing.yml up -d 这就是发生的事情。

lukas@E7450: docker-compose -f composer-testing.yml up
Recreating compare_dev_postgres
Recreating compare_dev_webapp
Recreating compare_dev_redis
Recreating compare_dev_varnish
Attaching to compare_test_postgres, compare_test_webapp, compare_test_varnish, compare_test_redis

docker-compose 不知何故决定重新创建并停止 developement 容器 - 只留下 testing 容器。我期望的是同时运行两个容器(开发和测试容器)我所拥有的只是测试容器!

ludd@E7450:~$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                        NAMES
f66b54032ca2        ldynia/varnish            "bash startup_varnish"   8 minutes ago       Up 2 minutes                                                     compare_test_varnish
83626ac27c32        redis                     "docker-entrypoint.sh"   8 minutes ago       Up 2 minutes        6379/tcp                                     compare_test_redis
97ad2f330272        cbs/compare-test:webapp   "bash scripts/startup"   8 minutes ago       Up 2 minutes        0.0.0.0:9000->80/tcp, 0.0.0.0:555->443/tcp   compare_test_webapp
4f174819744d        postgres:9.5.3            "/docker-entrypoint.s"   8 minutes ago       Up 2 minutes        5432/tcp                                     compare_test_postgres

问题:

为什么我不能同时运行这两个容器?为什么启动 testing 容器会停止 development 容器?如何并行运行这两个容器?<​​/p>

最佳答案

您可以,compose 只是将其视为同一个项目,因为您从同一目录运行并且没有定义项目。所以它使当前项目看起来像你上次给它的 compose 文件。

要同时运行它们,请像这样运行它们:

docker-compose -f composer-development.yml -p dev up -d

docker-compose -f composer-testing.yml -p test up -d

关于docker-compose 无法运行两个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489327/

相关文章:

amazon-ec2 - 如何从 Docker Hub 私有(private)仓库在 EC2 ECS 上部署 Docker 容器?

postgresql - 如何连接到 OpenMapTiles Docker Postgres DB

Docker 撰写错误 : nginx: [emerg] host not found in upstream "app" in/etc/nginx/conf. d/default.conf:21

带有容器的 Azure 应用服务不遵守使用 udp 进行端口转发的 docker-compose 语法

linux - 使用不带 sudo 的 docker-compose 不起作用

git - Bower + Git 子模块 + Docker 组合

windows - boot2docker 启动脚本与主机挂载本地共享文件夹

docker - 在不重新创建的情况下将日志轮换添加到现有容器

docker - Nginx 代理管理器(NGINX 反向代理)可以连接到 Cloudflare Argo 隧道吗?

amazon-web-services - AWS Elastic Beanstalk Docker 来自 ECR 错误 "No Docker image specified in Dockerrun.aws.json"