laradock環境下建立laravel horizon並在Jobs裡面使用docker指令(2/2)

LSZ
6 min readSep 8, 2020

--

上一篇

建立laravel job,在laradock目錄底下:

docker-compose exec worksapce bash#建立job
php artisan make:controller TestController
php artisan make:job TestJob

TestController

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Jobs\TestJob;
class TestController extends Controller
{
//OnQueue可以指定queue
public function index() {
TestJob::dispatch()->onQueue('default');
}
}

Route

Route::get('/test', 'TestController@index');

TestJob.php

<?phpnamespace App\Jobs;use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
exec('whoami', $out);
\Log::info($out);
exec('docker ps', $out1);
\Log::info($out1);
}
}

在網址欄輸入http://localhost/test啟動job,再去laravel.log看:

若是docker出來的結果為空,就是在php-worker container裡面,以laradock身分讀取docker.sock會權限不足,在container裡輸入指令:

chown laradock /var/run/docker.sock

就可以用laradock身分讀取docker.sock。

幾個有用的指令

/bin/sh底下

由於php-worker是/bin/sh,當然也可以裝bash,只要在Dockerfile設定一下。

  1. whoami
    可以查看自己的user名稱
  2. su - laradock
    使用docker-compose exec php-worker sh的時候,進去是預設root,可以使用此指令切換user。
  3. adduser {user名稱} {群組名稱}
    ex: adduser laradock root,將laradock加入root群組。
  4. apk add {套件名稱}
    在alpine linux底下的套件安裝指令。

docker-compose

  1. docker-compose up -d {服務名稱}
    沒有服務就建立並啟動,有的話就直接啟動。
  2. docker-compose restart php-worker
    特別寫明php-worker是因為當laravel裡面的Job程式碼改動時,有時候需要重啟php-worker才會生效,此指令就是重啟的功能,更改config
  3. docker-compose build {服務名稱}
    有改動Dockerfile時重新編譯以生效,若是沒有可以試試
    docker-compose build — no-cache {服務名稱},編譯完須用 force-recreate重新產生container。
  4. docker-compose build — no-cache {服務名稱} (— 是 兩個-的意思)
    視情況使用。
  5. docker-compose up -d — force-recreate {服務名稱}
    build完之後使用,重新產生container。

有用資源:

  1. https://github.com/docker/docker-install
    快速安裝docker command,只需執行2行,不適用在只有/bin/sh環境。
    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
  2. https://stackoverflow.com/questions/54099218/how-can-i-install-docker-inside-an-alpine-container
    在alpine下安裝docker指令,alpine只有/bin/sh。
    RUN apk add — update docker openrc
    RUN rc-update add docker boot
  3. https://itnext.io/docker-in-docker-521958d34efd
    主要遇到的錯誤就是
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 或是
    /var/run/docker.sock Permission Denied
    解決方法是參考這篇。

--

--