#python #docker
#python #docker
Вопрос:
Я работаю с инструментом Python, который использует docker для управления проектами. Я запускаю процесс установки с помощью команды,
$ 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
файле, и я запускаю команду pull
and up
с помощью docker.
Я думаю, что контейнер сам по себе не создан. Например, я предоставил данные для идентификатора клиента 15 и идентификатора проекта 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
Таким образом, информация из печати неверна, и контейнер не создан в первую очередь.
Как мне исследовать, в чем здесь проблема и почему контейнер не создается?
Спасибо.
Комментарии:
1. «Все прошло без проблем, но когда я пытаюсь установить новые плагины Php с помощью composure, инструмент не находит сам контейнер». Как вы устанавливаете плагины php и какую ошибку это вызывает?
2. Инструмент не находит контейнер, и ошибка возникает оттуда. Не могли бы вы, пожалуйста, перечитать вопрос? Я обновил его из выходных данных
$ docker ps
3. попробуйте
docker ps -a
, может быть завершен4. Кроме того, согласно документам ,
--no-start: Don't start the services after creating them.
5. @C.Nivs вы правы. Команда
docker ps -a
сообщает, что контейнеры созданы, но также завершаются после этого. Вы знаете, почему это происходит?
Ответ №1:
Избавьтесь от --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
Ничего не найдено, хотя мои контейнеры созданы.
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
Комментарии:
1. Ваш ответ помогает мне. Спасибо.
Ответ №2:
Как мне исследовать, в чем здесь проблема и почему контейнер не создается?
Ваша конфигурация кажется правильной и docker-compose
не сообщает о какой-либо ошибке, вероятно, ваш контейнер был создан, но либо не был запущен, либо вышел сразу после запуска. Вы используете, docker ps
который показывает только запущенный контейнер, вы, вероятно, увидите свой отсутствующий контейнер при запуске docker ps -a
.
docker-compose
не будет сообщать о какой-либо ошибке, если контейнер создан (и запущен) успешно, но вышел сразу после запуска. Если вы видите свой контейнер с помощью docker ps -a
, попробуйте запустить docker logs <container name>
, чтобы узнать, почему ваш контейнер вышел. Шаг для последующего решения проблем будет зависеть от того, как работает ваш контейнер.