我正在尝试执行以下命令:
docker exec mydocker echo "hello" >> /usr/local/src/scores.txt
但它给了我以下错误:
No such file or directory
但是使用以下命令:
docker exec -it mydocker bash
我确保文件确实存在于那里。我在这里找不到什么东西吗?
由于
答案 0 :(得分:3)
尝试在命令字符串中包装echo命令:
public static readonly BindableProperty CommandProperty = BindableProperty.Create("Command", typeof(ICommand), typeof(Button), null, propertyChanged: (bo, o, n) => ((Button)bo).OnCommandChanged());
public static readonly BindableProperty CommandParameterProperty = BindableProperty.Create("CommandParameter", typeof(object), typeof(Button), null,
propertyChanged: (bindable, oldvalue, newvalue) => ((Button)bindable).CommandCanExecuteChanged(bindable, EventArgs.Empty));
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public object CommandParameter
{
get { return GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
public event EventHandler Clicked;
void IButtonController.SendClicked()
{
ICommand cmd = Command;
if (cmd != null)
cmd.Execute(CommandParameter);
EventHandler handler = Clicked;
if (handler != null)
handler(this, EventArgs.Empty);
}
使用以下方式验证文件内容:
docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt'
答案 1 :(得分:1)
有一个很好的理由:它被解释为两个命令。
解决方案就像发布的stacksonstacks一样 - 将容器命令包装在一个shell命令中:
docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt'
但为什么会这样呢?
关键是你使用了bash运算符。与您运行类似的任何时间类似:
echo one two >> file.txt
“>>” operator不作为echo的参数传递(如“one”和“two”do)。而是执行echo命令并将其输出附加到文件中。
在这种情况下,“>>”运算符对docker exec执行相同操作,并尝试将结果输出到/usr/local/src/scores.txt并报告该目录不存在(在主机上,而不是容器上)。
这意味着如果你跑了:
docker exec mydocker echo "hello" >> scores.txt
你会在主机上找到scores.txt,包含“hello” - 来自容器上运行的命令的输出。 并作为最后的测试尝试:
docker exec cf65263ed353 hostname && hostname
您将看到它打印容器的主机名(其哈希ID),然后是您自己的主机名。第二个命令在主机上运行。