2017-12-27 23 views
2

CICD 프로세스의 일환으로 PHP 스크립트에서 Docker 이미지를 로그인하고 푸시하려고합니다.PHP 스크립트에서 Docker 허브에 로그인

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 

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); 
} 
?> 

다음 반환 : 여기에 코드입니다 성공했습니다.

내가 뭘 잘못하고 있니? 이렇게 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

로그인은 도커 허브의 repo과 관련된 암호와 이메일 주소를 포함한 모든 인증이 필요합니다 그 시점을 지나면

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

:

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

이 구문을 사용하여 다음과 같은 (예상)를 반환 push이 제대로 작동하고 오류를 반환하지 않습니다.