2
我試圖從PHP腳本登錄並推送Docker圖像作爲我們的CICD過程的一部分。下面是代碼:從PHP腳本登錄到Docker Hub
<?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嗎?或者這種技術應該不同?
編輯: PHP腳本將通過AJAX調用,有效地使它運行,就像它從瀏覽器運行一樣。我正在從瀏覽器運行它來進行測試。
嘗試'echo「密碼」| sudo docker登錄名--username $ duser --password-stdin',可能工作.. –
查看文檔https://docs.docker.com/engine/reference/commandline/login/#login-to-a-self -hosted-registry the提供使用STDIN部分的密碼 –
不要忘了擺脫'全球'; p你應該知道更好的... –