簡體   English   中英

在 docker 外調用 Docker 容器

[英]Call Docker container outside docker

我有一個在 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 並擁有 node 和 npm。 為此,它模擬了一個瀏覽器,所以我有一個 chrome 服務,但我不知道這是否是正確的方法。

這 2 個命令在終端中工作:

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

但是,Browsershot 需要可執行節點和 npm 的路徑,它們突然變成了上面的 2 個命令,就像這樣:

/**
 * @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$nodePath docker-compose run --rm browsershot node和變量$npmPath id $npmPath 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.

嘗試使用 bash 運行命令

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

使用 docker-compose 時,我只是像這樣“ssh”進入容器的外殼:

docker-compose exec php /bin/bash

(其中php是我docker-compose.yml的容器)

請記住,對於您打開的每個終端窗口,您還需要運行以下命令以加載環境變量:

eval $(docker-machine env)

如果不這樣做,您將收到Couldn't connect to Docker daemon消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM