我正在尝试为现有的docker容器运行以下命令:
docker exec my_docker printf '%sTest' >> /usr/local/src/test.txt
它给了我以下错误:
-bash: /usr/local/src/test.txt: No such file or directory
当我执行以下操作时:
docker exec -it my_docker bash
输入相同的命令,一切正常。我在这里缺少什么吗?
由于
答案 0 :(得分:4)
有一个很好的理由:它被解释为两个命令。尝试将printf命令包装在命令字符串中:
/**
* Management Team Shortcode
**/
function team_query() {
$args = array(
'posts_per_page' => -1,
'post_type' => 'management-team',
'order' => 'DESC',
);
$posts = get_posts( $args );
if ( !empty( $posts ) ) {
$flag = 0;
foreach ($posts as $counter => $p) {
$counter++;
if ( $flag <= 2 ) {
$flag++;
}
$role = get_field( "role" );
$name = get_field( "team_member_name" );
$bio = get_field( "bio" );
$profile = get_the_post_thumbnail_url( $p->ID, 'full' );
$flip = get_field( "flip_content" );
$html_out = '<article class="team-member">';
// Do stuff with each post here
if ( $flag % 2 == 0 ) {
//add image after second post like
$html_out .= '<img src="http://www.ankitdesigns.com/demo/rawafid/wp-content/themes/rawafid-systems/assets/img/mt-1.jpg" alt="Safety Whistle" />';
}
if ( $counter % 6 == 0 ) {
$flag = 0;
//add image after sixth post like
$html_out .= '<img src="http://www.ankitdesigns.com/demo/rawafid/wp-content/themes/rawafid-systems/assets/img/mt-2.jpg" alt="Safety Whistle" />';
}
$html_out .= '<div class="meta-team"><h6>' . $role . '</h6>' . '<h4>' . $name . '</h4>' . '<p>' . $bio . '</p></div>';
$html_out .= '</article>';
}
} else {
// No results
$html_out = 'No Management Team Members Found.';
}
return $html_out;
}
add_shortcode( 'show_management_team', 'team_query' );
关键是你使用了bash运算符。与您运行类似的任何时间类似:
docker exec my_docker bash -c 'printf "%sTest" >> /usr/local/src/test.txt'
“&gt;&gt;” operator不作为echo的参数传递(如“one”和“two”do)。而是执行echo命令并将其输出附加到文件。在这种情况下,“&gt;&gt;”运算符对docker exec执行相同的操作,并尝试将结果输出到echo one two >> file.txt
并报告该目录不存在(在主机上,而不是容器上)。
答案 1 :(得分:0)
你可以这样做:
docker exec my_docker bash -c "printf '%sTest' >> /usr/local/src/test.txt"
确保bash正在执行正确的命令。
答案 2 :(得分:0)
您的泊坞主机上的shell会捕获>>
。所以它试图将docker
命令的结果输出到主机上的文件系统,而不是输出printf
命令到容器内的文件系统。如果主机上不存在/usr/local/src/
,则在尝试输出到该目录中的文件时会出现该错误。
正如其他人所提到的那样,引用整个字符串并作为参数传递给bash -c
,以便在容器中处理它。