首页 > 解决方案 > 未创建 Docker 容器

问题描述

我使用一个使用 docker 进行项目管理的 Python 工具。我用命令运行设置过程,

$ bin/butler.py setup

无缝通过,但是当我尝试使用 安装新的 PHP 插件时composure,该工具找不到容器本身。

所以,我的结论是该工具首先没有正确创建容器。

我描述了下面的设置过程。初始配置后,这是开始的地方,

    # all done

    print("pull doker images images")
    self.docker.compose_pull(self.local_yml)
    print("create containers")

    self.docker.compose_setup(self.local_yml)
    print("setup completed")

这是 docker 执行的通用命令。我知道它有一个安全漏洞,但是,目前这不是问题。

def compose(self, params, yaml_path="docker-compose.yml"):
    """ execte docker-compose commmand """
    cmd = f"docker-compose -f {yaml_path} {params}"
    print(cmd)
    try:
        subprocess.run(cmd, shell=True, check=True)
    except Exception:
        pass

   def compose_pull(self, yaml_path):
       self.compose("pull --ignore-pull-failures", yaml_path)
   
   def compose_setup(self, yaml_path):
       self.compose(f"--project-name {self.project_name} up --no-start ", yaml_path)

打印输出提供命令,

pull doker images images

# We use a docker-compose.yml and perform the pull operation
docker-compose -f /Users/chaklader/PycharmProjects/Welance-Craft-Starter/build/docker-compose.yml pull --ignore-pull-failures
Pulling database ... 
Pulling craft    ... 
create containers

# We use a docker-compose.yml and perform the up operation for the project

docker-compose -f /Users/chaklader/PycharmProjects/Welance-Craft-Starter/build/docker-compose.yml --project-name p13-27 up --no-start 
Creating network "p13-27_default" with the default driver
Creating p13-27_database ... 
Creating p13-27_craft    ... 
setup completed

提供docker-compose.yml文件,

services:
  craft:
    container_name: p13-27_craft
    environment:
      CRAFT_ALLOW_UPDATES: 'false'
      CRAFT_DEVMODE: 1
      CRAFT_EMAIL: admin@welance.de
      CRAFT_ENABLE_CACHE: 0
      CRAFT_LOCALE: en_us
      CRAFT_PASSWORD: welance
      CRAFT_SITENAME: Welance
      CRAFT_SITEURL: //localhost
      CRAFT_USERNAME: admin
      DB_DATABASE: craft
      DB_DRIVER: mysql
      DB_PASSWORD: craft
      DB_PORT: '3306'
      DB_SCHEMA: public
      DB_SERVER: database
      DB_TABLE_PREFIX: craft_
      DB_USER: craft
      ENVIRONMENT: dev
      HTTPD_OPTIONS: ''
      LANG: C.UTF-8
      SECURITY_KEY: some_key_:)
    image: welance/craft:3.1.17.2
    links:
    - database
    ports:
    - 80:80
    volumes:
    - /var/log
    - ./docker/craft/conf/apache2/craft.conf:/etc/apache2/conf.d/craft.conf
    - ./docker/craft/conf/php/php.ini:/etc/php7/php.ini
    - ./docker/craft/logs/apache2:/var/log/apache2
    - ./docker/craft/adminer:/data/adminer
    - ../config:/data/craft/config
    - ../templates:/data/craft/templates
    - ../web:/data/craft/web
  database:
    command: mysqld --character-set-server=utf8  --collation-server=utf8_unicode_ci
      --init-connect='SET NAMES UTF8;'
    container_name: p13-27_database
    environment:
      MYSQL_DATABASE: xyz
      MYSQL_PASSWORD: xyz
      MYSQL_ROOT_PASSWORD: xyz
      MYSQL_USER: xyz
    image: mysql:5.7
    volumes:
    - /var/lib/mysql
version: '3.1'

总之,我的基础镜像是welance/craft:3.1.17.2,我用它来创建名为p13-27_craft. 文件中提供了附加配置docker-compose.yml,我使用 docker 运行pullandup命令。

我认为容器本身不是创建的。例如,我提供了客户 ID 15 和项目 ID 55 的数据,打印输出显示通知Creating p15-55_craft ... done

当我运行命令查看是否从终端创建容器时,我发现,

$ docker ps 
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                 NAMES
cf2ea4638772        welance/craft:3.1.17.1   "/data/scripts/run-c…"   37 minutes ago      Up 37 minutes       0.0.0.0:80->80/tcp    p13-17_craft
4504ae62035f        mysql:5.7                "docker-entrypoint.s…"   About an hour ago   Up About an hour    3306/tcp, 33060/tcp   p13-17_database
518e3535859b        mysql:5.7 

因此,打印中的信息不正确,并且最初没有创建容器。

我如何调查这里的问题以及为什么没有创建容器?

谢谢你。

标签: pythondocker

解决方案


摆脱该--no-start选项,并添加-d标志以作为守护进程(后台进程)运行。如果我运行自己的解决方案:

docker-compose up --no-start
Creating alerts-cache ... done
Creating mongoClientTemp ... done
Creating apilayer_alerts-api_1 ... done

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Nothing is found, even though my containers are created.

docker-compose up -d
Starting alerts-cache ... done
Starting mongoClientTemp ... done
Starting apilayer_alerts-api_1 ... done

docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                      NAMES
af557a2add73        bdsdev.azurecr.io/rva_flask    "python app.py alert…"   2 minutes ago       Up 1 second         0.0.0.0:5000->5000/tcp     apilayer_alerts-api_1
829da0fabe62        bdsdev.azurecr.io/temp_mongo   "docker-entrypoint.s…"   2 minutes ago       Up 2 seconds        27017/tcp                  mongoClientTemp
cdb67a305233        mongo

推荐阅读