我设置了一个简单的测试环境。
Dockerfile
FROM ubuntu:16.04
COPY test.sh /
ENTRYPOINT /test.sh
test.sh
#!/bin/bash
while true; do
echo "test..."
sleep 5
done
docker-compose.yml
version: '3.4'
services:
test:
image: asleea/simple_test
entrypoint: ["/test.sh", ">", "test.log"]
# command: [">", "/test.log"]
container_name: simple_test
运行测试容器
$docker-compose up
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.
Starting simple_test ...
Starting simple_test ... done
Attaching to simple_test
simple_test | test...
simple_test | test...
stdout
。 检查容器中的
test.log
$ docker exec -it simple_test bash
$ cd /
$ ls
# No file named `test.log`
重定向的
test.log
不存在。 docker
似乎只是忽略重定向。这正常吗?为什么?还是我做错事了?编辑
谢谢@塞巴斯蒂安的回答。它可以将
stdout
重定向到文件。但是,还有一个问题。
您引用的docs也说以下内容。
据我了解,
command: /test.sh > /test.log
与command: ["sh", "-c", "/test.sh > /test.log"]
等效。但是,当我执行
command: /test.sh > /test.log
时,它也没有重定向。为什么
command: ["sh", "-c", "/test.sh > /test.log"]
但是command: /test.sh > /test.log
可以工作。我会误会吗?
最佳答案
您需要确保命令在 shell 中执行。尝试使用:
CMD [ "sh", "-c", "/test.sh", ">", "test.log" ]
您将命令/入口点指定为JSON,称为exec形式
Docker docs
关于docker - 为什么将容器标准输出重定向到文件不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48146964/