2017-12-27 10 views
2

私は、CICDプロセスの一部としてPHPスクリプトからDockerイメージをプッシュしようとしています。ここでは、コードは次のようになります。PHPスクリプトからDockerハブにログイン

<?php 

include '../php/database.php'; 

$duser = 'username'; 
$dpass = 'password'; 
$dmail = 'email'; 

$tag = 'from system'; 

function tagImage($tag) { 
    $getImageID = "SELECT `imageID` FROM `docker_images` WHERE `tag` = :tag "; 
    $params = array(':tag' => $tag); 
    $results = dataQuery($getImageID, $params); 
    if(!empty($results)) { 
     $image = $results[0]['imageID']; 
     global $repo = $results[0]['repo']; // I know this is a bad idea, will change it when all else is working 
     $last = system("sudo docker tag -f $image $repo 2>&1", $retval); 
    } 
    return $retval; 
} 

$tagStatus = tagImage($tag); 

if(0 == $tagStatus) { 
    echo '<pre>'; 

    $login = system("sudo docker login --username=$duser", $retval); 
    var_dump($login); 
    var_dump($retval); 
    // push it real good 
    $last = system("sudo docker push $repo 2>&1", $retval1); 
    var_dump($last); 
    var_dump($retval1); 
} 
?> 

これは以下を返します。

string(0) "" 
int(1) 
The push refers to a repository [app/ap-name] (len: 1) 
21d623eb89a9: Image push failed 

Please login prior to push: 
Username: EOF 
string(13) "Username: EOF" 
int(1) 

私は、コマンドラインからのログインをログイン時にログインが、しかし、PHPスクリプトから動作していないので、プッシュが失敗しています成功です。

私は間違っていますか?このようにPHPでDocker Hubにログインできますか?それともテクニックが違うのでしょうか?

EDIT: PHPスクリプトはAJAX経由で呼び出され、ブラウザから実行されているかのように効果的に実行されます。私はテスト目的のためにブラウザから実行しています。

+0

'echo" password "を試してください。 sudo docker login --username $ duser --password-stdin'、動作する可能性があります。 –

+0

文書を参照してくださいhttps://docs.docker.com/engine/reference/commandline/login/#login-to-a-self -hosted-registryパスワードをSTDINの部分を使って指定する –

+0

'global'を取り除くのを忘れてしまいました;あなたはもっとよく知っているはずです... –

答えて

1

ログインがドッカーハブレポに関連付けられたパスワードとメールアドレスを含むすべての資格が必要です。

$login = system("sudo docker login --username $duser --password $dpass --email $dmail 2>&1", $retval); 
var_dump($login); 
var_dump($retval); 

この構文を使用した(予想される)次の値を返します。

WARNING: login credentials saved in /root/.dockercfg. 
Login Succeeded 
string(15) "Login Succeeded" 
int(0) 

その時点の過去pushが正常に動作し、エラーは返されません。

関連する問題