Docker exec printf给出了没有这样的文件或目录错误

时间:2016-06-20 18:16:33

标签: docker

我正在尝试为现有的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

输入相同的命令,一切正常。我在这里缺少什么吗?

由于

3 个答案:

答案 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,以便在容器中处理它。