Звоните Docker контейнер снаружи docker - PullRequest
0 голосов
/ 24 января 2020

У меня есть проект, работающий под Apache и без docker. Однако в этом проекте у меня есть экспорт PDF, и этот экспорт PDF я хочу назвать его в контейнере docker. Как вы это делаете?

Вот мой docker-compose.yaml:

version: "3.3"

services:
    php:
        image: registry.gitlab.com/nodevo/keneo/php:latest
        volumes:
            - .:/srv:rw,cached
            - ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro
            - ~/.composer:/tmp

    browsershot:
        image: ouranoshong/browsershot
        links:
          - chrome

    chrome:
        build: ./docker/chrome
        cap_add:
            - SYS_ADMIN
        ports:
            - '9223:9222'

Служба Browsershot загружает PDF и имеет узел и npm. Для этого он имитирует браузер, поэтому у меня есть сервис chrome, но я не знаю, правильный ли это метод.

Эти две команды работают в терминале:

docker-compose run --rm browsershot node -v
docker-compose run --rm browsershot npm -v

Однако для Browsershot требуется путь к исполняемому узлу и npm, которые внезапно становятся двумя приведенными выше командами, вот так:

/**
 * @param string $nodePath
 * @param string $npmPath
 */
public function __construct(string $nodePath, string $npmPath)
{
    $this->browserShot = new Browsershot();
    $this->browserShot
        ->setNodeBinary($nodePath)
        ->setNpmBinary($npmPath)
        ->showBackground()
        ->setOption('fullPage', true)
        ->setOption('args', ['--disable-web-security'])
        ->emulateMedia('screen')
    ;
}

Переменная $nodePath равна docker-compose run --rm browsershot node, а переменная $npmPath id docker-compose run --rm browsershot npm. Этот код работает с исполняемым файлом на моем локальном компьютере, например /usr/local/bin/node и /usr/local/bin/npm.

Но, когда я запускаю экспорт с помощью команд docker, я получаю эту ошибку:

HTTP 500 Internal Server Error
The command "PATH=$PATH:/usr/local/bin NODE_PATH=`docker-compose run --rm browsershot node docker-compose run --rm browsershot npm root -g` docker-compose run --rm browsershot node '/media/vdufour/DATA/Sites/keneo/vendor/spatie/browsershot/src/../bin/browser.js' '{"url":"file:\/\/\/tmp\/639306024-0718333001579852859\/index.html","action":"pdf","options":{"args":["--disable-web-security"],"viewport":{"width":800,"height":600},"fullPage":true,"emulateMedia":"screen","delay":2000,"displayHeaderFooter":false,"printBackground":true}}'" failed.

Exit Code: 1(General error)

Working directory: /media/vdufour/DATA/Sites/keneo/public

Output:
================


Error Output:
================
Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Ответы [ 2 ]

0 голосов
/ 28 января 2020

При использовании docker -compose я просто "s sh" в оболочку контейнера, например:

docker-compose exec php /bin/bash

(где php - контейнер в my docker-compose.yml)

Помните, что для каждого окна терминала, которое вы открываете, вам также нужно запустить следующее для загрузки в среде vars:

eval $(docker-machine env)

Без этого вы получите сообщение Couldn't connect to Docker daemon.

0 голосов
/ 28 января 2020

Попробуйте запустить команды с bash

docker-compose run --rm browsershot bash -c "npm && node && some_command..."
...