docker 无法运行并出现错误 /bin/sh: 1: tee /opt/app.log: not find

问题描述 投票:0回答:1

我为nodejs项目创建了一个docker conatiner,由于以下错误,docker conatiner无法运行:

/bin/sh: 1: tee /opt/app.log: not found

这是我的 Dockerfile:

FROM node:14.16.1
WORKDIR /app
COPY . /app
RUN chmod 500 /app/init.sh
CMD sh ./init.sh 2>&1 | tee /opt/app.log       
node.js docker docker-compose dockerfile
1个回答
0
投票

你失败的原因是因为

tee /opt/app.log
由于某种原因被单个术语解释为
sh
CMD。

以下 Dockerfile 使用

ENTRYPOINT
sh
指定为容器化引擎使用的二进制文件,然后使用其中的参数按照您想要的方式执行管道重定向:

FROM node:14.16.1
WORKDIR /app
COPY . ./
RUN chmod 500 ./init.sh

ENTRYPOINT ["sh"]
CMD ["-c", "./init.sh 2>&1 | tee /opt/app.log"]

以下是我的示例

init.sh
脚本的内容:

#!/usr/bin/env sh

echo "made it here!"
echo "example stderr" >&2

sleep infinity

我自己使用 Podman,但以下是我的示例命令的输出:

~/containerPipedCMD$ sudo podman build -t container-piped-cmd:0.0.2 .
STEP 1/6: FROM node:14.16.1
STEP 2/6: WORKDIR /app
--> Using cache ccbd8b5d1cf9bcefed05e9e4a1c5824f03f8fa1c4bd3f32e1ef6f7c603de0d7a
--> ccbd8b5d1cf
STEP 3/6: COPY . ./
--> 1bc2c5efb0c
STEP 4/6: RUN chmod 500 ./init.sh
--> 757b4540f2e
STEP 5/6: ENTRYPOINT ["sh"]
--> 77ecf538749
STEP 6/6: CMD ["-c", "./init.sh 2>&1 | tee /opt/app.log"]
COMMIT container-piped-cmd:0.0.2
--> a5025cfbebe
Successfully tagged localhost/container-piped-cmd:0.0.2
a5025cfbebe557e7c35360821850f591b45bda1ef6c92149ac6d48f0110941d7

~/containerPipedCMD$ sudo podman start container-piped-cmd
container-piped-cmd

~/containerPipedCMD$ sudo podman start container-piped-cmd
container-piped-cmd

$ sudo podman ps -a
CONTAINER ID  IMAGE                                COMMAND               CREATED         STATUS            PORTS       NAMES
e33ce19edc9d  localhost/container-piped-cmd:0.0.2  -c ./init.sh 2>&1...  17 seconds ago  Up 4 seconds ago              container-piped-cmd

$ sudo podman logs container-piped-cmd
made it here!
example stderr

$ sudo podman exec -it container-piped-cmd cat /opt/app.log
made it here!
example stderr

但是,正如评论所建议的,最好将容器的标准输出依赖于容器化引擎。

© www.soinside.com 2019 - 2024. All rights reserved.