<div dir="ltr">Yes, thanks, that was the issue and I pushed a fix which is in the libcontainer criu branch. I have my images restoring into completely new containers reliably now. </div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 12, 2015 at 3:55 AM, Saied Kazemi <span dir="ltr">&lt;<a href="mailto:saied@google.com" target="_blank">saied@google.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Ross,<br>
<br>
As Pavel mentioned, I was out on vacation and have just started<br>
catching up with a ton of email...<br>
<br>
I assume that you have fixed the issue by now (haven&#39;t looked at<br>
Github yet).  FWIW, however, the new container exits because its<br>
standard descriptors (pipes) are not properly set up.  This is because<br>
--inherit-fd replaces the &quot;old fd&quot; with the new one to be inherited.<br>
Since you are restoring to a brand new container, there is no &quot;old fd&quot;<br>
and, therefore, --inherit-fd doesn&#39;t do anything which means the<br>
process&#39;s standard file descriptors are not properly set up, hence the<br>
SIGPIPE.<br>
<br>
Sorry for the rant if you&#39;ve already resolved the issue.<br>
<br>
--Saied<br>
<div><div class="h5"><br>
<br>
On Mon, Apr 27, 2015 at 3:55 PM, Ross Boucher &lt;<a href="mailto:rboucher@gmail.com">rboucher@gmail.com</a>&gt; wrote:<br>
&gt; Just wanted to follow up here. The issue turned out to be that I was<br>
&gt; providing the wrong pipe id to inherit_fd (resolved here:<br>
&gt; <a href="https://github.com/docker/libcontainer/pull/557" target="_blank">https://github.com/docker/libcontainer/pull/557</a>)<br>
&gt;<br>
&gt; On Fri, Apr 24, 2015 at 8:43 AM, Ross Boucher &lt;<a href="mailto:rboucher@gmail.com">rboucher@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Using a checkpointed file system doesn&#39;t seem to make a difference.<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Apr 24, 2015 at 8:26 AM, Ross Boucher &lt;<a href="mailto:rboucher@gmail.com">rboucher@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The containers are started from the same image and don&#39;t write to the<br>
&gt;&gt;&gt; filesystem (though I suppose something somewhere could be writing without my<br>
&gt;&gt;&gt; knowledge).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; My next step was to use docker commit to checkpoint the filesystem as<br>
&gt;&gt;&gt; well, and then create the new container based on that image. I&#39;ll try that<br>
&gt;&gt;&gt; and see if it changes anything, even though I don&#39;t expect it to.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Fri, Apr 24, 2015 at 8:23 AM, Pavel Emelyanov &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 04/24/2015 06:12 PM, Ross Boucher wrote:<br>
&gt;&gt;&gt;&gt; &gt; Yeah, but I think there are other problems as well. I&#39;m trying the<br>
&gt;&gt;&gt;&gt; &gt; same restore process with<br>
&gt;&gt;&gt;&gt; &gt; a more complex program and seeing odd behavior: the process gets<br>
&gt;&gt;&gt;&gt; &gt; restored, but it seems to be<br>
&gt;&gt;&gt;&gt; &gt; hung. I have a thread in this program that just prints in a loop every<br>
&gt;&gt;&gt;&gt; &gt; second and it never<br>
&gt;&gt;&gt;&gt; &gt; prints after being restored (again, this works fine if I restore into<br>
&gt;&gt;&gt;&gt; &gt; the same container).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hm... How do you make sure the filesystem of the container you restore<br>
&gt;&gt;&gt;&gt; into equals<br>
&gt;&gt;&gt;&gt; the filesystem of the container you dumped from?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; The thing is -- if at least one byte in some library changes, criu<br>
&gt;&gt;&gt;&gt; doesn&#39;t notice it<br>
&gt;&gt;&gt;&gt; (as it doesn&#39;t mess with filesystems) and maps them back into processes.<br>
&gt;&gt;&gt;&gt; They _can_<br>
&gt;&gt;&gt;&gt; break due to this. E.g. if you have prelink running in container, it can<br>
&gt;&gt;&gt;&gt; make vary<br>
&gt;&gt;&gt;&gt; nasty stuff :)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; -- Pavel<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; On Fri, Apr 24, 2015 at 6:59 AM, Pavel Emelyanov &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a><br>
&gt;&gt;&gt;&gt; &gt; &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;     On 04/24/2015 04:47 PM, Ross Boucher wrote:<br>
&gt;&gt;&gt;&gt; &gt;     &gt; inherit_fd is being used -- this example works fine if I restore<br>
&gt;&gt;&gt;&gt; &gt; to the same container,<br>
&gt;&gt;&gt;&gt; &gt;     &gt; it&#39;s only breaking now that I&#39;m attempting to restore into a<br>
&gt;&gt;&gt;&gt; &gt; completely different container.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;     So the pipe doesn&#39;t get inherited when you restore into different<br>
&gt;&gt;&gt;&gt; &gt; container?<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt; On Fri, Apr 24, 2015 at 4:50 AM, Pavel Emelyanov<br>
&gt;&gt;&gt;&gt; &gt; &lt;<a href="mailto:xemul@parallels.com">xemul@parallels.com</a> &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt; &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a> &lt;mailto:<a href="mailto:xemul@parallels.com">xemul@parallels.com</a>&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     On 04/24/2015 12:11 AM, Ross Boucher wrote:<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt; Another update: I was intrigued by the exit code (which<br>
&gt;&gt;&gt;&gt; &gt; implies SIGPIPE?), since the docker process<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt; I was running was indeed piping:<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;     /bin/sh -c &#39;i=0; while true; do echo $i; i=$(expr $i +<br>
&gt;&gt;&gt;&gt; &gt; 1); sleep 3; done&#39;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt; I tried the same process of checkpointing in one container<br>
&gt;&gt;&gt;&gt; &gt; and restoring to another by writing to a file instead:<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;     /bin/sh -c &#39;i=0; while true; do echo $i &gt; /tmp/foo;<br>
&gt;&gt;&gt;&gt; &gt; i=$(expr $i + 1); sleep 3; done&#39;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     &gt; And this worked correctly! So I&#39;ve narrowed it done some<br>
&gt;&gt;&gt;&gt; &gt; more, and I&#39;ll continue to look into it.<br>
&gt;&gt;&gt;&gt; &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     If these are pipes indeed (docker terminals?) then the<br>
&gt;&gt;&gt;&gt; &gt; --inherit-fd option should be used.<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     Saied (from Google) did some work doing this for<br>
&gt;&gt;&gt;&gt; &gt; docker+criu, he can shed more light, but<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     he&#39;s on vacation right now :)<br>
&gt;&gt;&gt;&gt; &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;     -- Pavel<br>
&gt;&gt;&gt;&gt; &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;     &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; CRIU mailing list<br>
&gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
&gt;<br>
</blockquote></div><br></div>