我写了一个简单的程序,应该打印数字从1到9,等待1秒之间的打印。
#!/usr/bin/env perl6
my $x = 1;
while $x < 10 {
say $x++;
sleep(1);
}当我从命令行运行它时,它就像预期的那样工作。
我试图达到同样的效果,使用码头集装箱和程序打印的第一个数字,然后冻结在9秒,打印其余的数字。
我的船坞-写作
version: "3.1"
services:
cron:
build: phpdocker/cron
container_name: docker-perl6
volumes:
- ./cron:/cron
working_dir: /cron
command: "app.pl"和Dockerfile
FROM jjmerelo/alpine-perl6版本
docker -v
Docker version 18.03.1-ce, build 9ee9f40
docker-compose -v
docker-compose version 1.15.0, build e12f3b9
perl6 -v
This is Rakudo version 2018.03-136-g768cf9f built on MoarVM version 2018.03-56-g85fc758
implementing Perl 6.c.更新
我把say $x++;改成了say "{time}: {$x++}";
docker-perl6 | 1527933936: 1
docker-perl6 | 1527933937: 2
docker-perl6 | 1527933938: 3
docker-perl6 | 1527933939: 4
docker-perl6 | 1527933940: 5
docker-perl6 | 1527933941: 6
docker-perl6 | 1527933942: 7
docker-perl6 | 1527933943: 8
docker-perl6 | 1527933944: 9因此,正如@elizabeth-mattijsen和@melpomene提到的那样,这是与码头缓冲产出有关的问题。
发布于 2018-06-02 10:47:24
首先,感谢您使用我的perl6码头容器。我会试着用你的程序做一些事情,找出真正的问题所在。我想你想知道,一般来说,这类程序在码头上会发生什么,而不是在特定的对接-合成环境中,对吗?
从码头容器内运行程序
你可以这样做:
docker run -it --rm --entrypoint sh jjmerelo/alpine-perl6然后在容器中创建文件(例如使用cat > con )。我已经测试过了,它运行正常,一点问题都没有。
从码头容器外部运行程序
你可以这样做:
docker run -it --rm -v $PWD:/app jjmerelo/alpine-perl6 /app/app.pl一点问题都没有,它一秒钟就打印一个东西。它本身似乎并不是一个码头缓冲问题。让我们再往前走一点
码头工有什么问题吗?
您在这里所做的是组成两个码头容器,您从另一个容器运行一个容器。我们已经很好地确定,阿尔卑斯峰6可能没有问题。可能是在phpdocker里吗?我的钱就在上面,虽然还不清楚你在使用哪个容器,这个要点似乎指向了实际使用缓冲的容器。。在更新的答案中,实际上不是打印的时间,而是要打印的字节数,足以填充缓冲区。尝试将$x更改为"a good amount of bytes, including $x",看看是否是这样。
无论如何,正如@lizmat所说,我会查看phpdocker容器的配置。此外,如果您想要的只是cron,您可以遵照这个建议,为高山安装cron,或使用像这个这样的其他容器。
发布于 2018-06-02 11:43:34
正如其他人已经说过的那样,缓存是由您正在使用的间接方向引起的。您可以手动地以如下方式以交互方式运行容器:
docker run -it --rm author/image-name重要的部分是-it交换机:
--interactive , -i Keep STDIN open even if not attached
--tty , -t Allocate a pseudo-TTY在默认情况下,docker-compose run分配一个tty,而大多数停靠-组合命令没有。如果您真的需要添加这些选项(99%的时间是不需要的),特别是stdin_open和tty,那么查看一下添加这些选项的docker-compose.yaml配置。
https://stackoverflow.com/questions/50655174
复制相似问题