Пофиксить её можно так:

В файле:

local/modules/sprint.migration/lib/versionconfig.php:207

добавить условие:

if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
    $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
}

Код всего блока:

if (empty($values['migration_dir'])) {
    $values['migration_dir'] = Module::getPhpInterfaceDir() . '/migrations';
} elseif (empty($values['migration_dir_absolute'])) {
    if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
        $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
    }
}

Добавляем в папку /etc/systemd/system файл docker-compose-myappname.service со следующим содержимым:

[Unit]
Description=Docker Compose MyAppName Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/username/myappname
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose stop
TimeoutStartSec=0
User=username
Group=username

[Install]
WantedBy=multi-user.target

Включаем сервис:

sudo systemctl enable docker-compose-myappname

Устанавливаем apache2-utils, если утилита htpasswd отсутствует:

sudo apt-get install apache2-utils

Выполняем следующее, заменив username и password:

echo $(htpasswd -nbB username "password")

В результате получаем строку, которую можно указать в файле traefik.toml:

username:$2y$05$zBpWD5KcCDxw9durV29ZSOTbhi8Ltef7g/f0C5mLTrd0enQILkBRy

Для использования в файле docker-compose.yml нужно добавить экранирование символа $:

echo $(htpasswd -nbB username "password") | sed -e s/\\$/\\$\\$/g

Как найти образ по имени?

docker search lamp

Как загрузить выбранный образ?

docker pull linode/lamp

Как увидеть список загруженных образов?

docker images -a

Как удалить образ?

docker rmi 509317b58560

Как запустить загруженный образ?

docker run -it linode/lamp bash

Ключи:

-i, --interactive  Keep STDIN open even if not attached
-t, --tty          Allocate a pseudo-TTY

/bin/bash это команда, которая будет запущена после запуска контейнера.

Как перейти в консоль к запущенному контейнеру?

docker attach container_name

Как увидеть список контейнеров?

docker ps -a

Как удалить контейнер?

Бывает полезно для просмотра ключей больших многомерных массивов.

function showArrayKeysStructure(array $array, $level = 0)
{
    echo '<pre>';

    foreach ($array as $key => $value) {
        echo str_repeat("\t", $level) . var_export($key, true) . PHP_EOL;

        if (is_array($value)) {
            showArrayKeysStructure($value, $level + 1);
        }
    }

    echo '</pre>';
}
try {
    // путь к картинке, которая либо есть на деве, либо её нужно загрузить с прода на дев
    $src = $image['src'];

    // адрес прода, откуда будем скачивать картинки
    $externalDomain = 'https://example.com';

    $root = \Bitrix\Main\Application::getDocumentRoot();

    $filePath = $root . $src;

    // если картинки нет на деве
    if (!file_exists($filePath)) {
        $fileExternalLink = $externalDomain . $src;

        // то скачиваем её один раз
        $fileExternalContent = file_get_contents($fileExternalLink);

        if (!empty($fileExternalContent)) {
            // и сохраняем себе
            \Bitrix\Main\IO\File::putFileContents($filePath, $fileExternalContent);
        }
    }
} catch (\Exception $e) {
    ShowError($e->getMessage());
}

Страницы