我想在podman-compose
和podman
上输入一些关于环境变量的信息(我尝试了docker
和docker-compose
,结果相同),请考虑以下场景:
我在/tmp/my-binaries
:中有一个二进制文件my-binary
#!/bin/sh
echo "Hello World"
我创建了一个docker-compose.yml
:
version: "3"
services:
test-container:
image: python:3.9-slim
environment:
- PATH="/home/minkiu/.local/bin:/home/minkiu/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/minkiu/.pyenv/bin:/tmp/my_binaries"
volumes:
- "/tmp/my_binaries:/tmp/my_binaries"
command: ["my-binary"]
我试图将二进制文件所在的目录附加到PATH
,并使用volumes
键进行映射。
现在我的期望是,在podman-compose up
上,我应该看到Hello World
,但事实并非如此,我得到:
Error: unable to start container <container-id>: executable file `my-binary` not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not found
125
默认情况下,podman-compose
的输出非常详细,因此我可以看到以下命令:
podman create --name=podman-test_test-container_1 --pod=podman-test --label io.podman.compose.config-hash=123 --label io.podman.compose.project=podman-test --label io.podman.compose.version=0.0.1 --label com.docker.compose.container-number=1 --label com.docker.compose.service=test-container -e PATH="/home/minkiu/.local/bin:/home/minkiu/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/minkiu/.pyenv/bin:/tmp/my_binaries" -v /tmp/my_binaries:/tmp/my_binaries --add-host test-container:127.0.0.1 --add-host podman-test_test-container_1:127.0.0.1 python:3.9-slim my-binary
因此,我获取相同的命令,并执行podman run
:
podman run --rm -e PATH="/home/minkiu/.local/bin:/home/minkiu/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/minkiu/.pyenv/bin:/tmp/my_binaries" -v /tmp/my_binaries:/tmp/my_binaries python:3.9-slim my-binary
我得到了预期的输出。
一些研究使我意识到run
就是create, start and attach
的一体。
所以我的问题是,为什么不通过podman-compose
工作,而是通过podman run
工作?
podman run
真的比podman {create,start,attach}
更吗?
干杯。
我遇到了与您描述的问题相同的问题,该问题在我的环境中与SELinux配置有关。所以我在volumes
:中用一个estra:Z
解决了这个问题
version: "3"
services:
test-container:
image: python:3.9-slim
environment:
- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/tmp/my_binaries"
volumes:
- /tmp/my_binaries:/tmp/my_binaries:Z
command: ["/tmp/my_binaries/my-binary"]
脚本/tmp/my_binaries/my-binary
必须是可执行的。如果没有,将显示以下错误:
open executable: Permission denied: OCI permission denied
以下是完整的输出:
$ podman-compose up
using podman version: podman version 3.4.1
podman pod create --name=tests --share net
8739e69897f2b7c7d004c7ea83df3b3a5fd22db6533720bfd6bffcd0040d651e
0
podman create --name=tests_test-container_1 --pod=tests --label io.podman.compose.config-hash=123 --label io.podman.compose.project=tests --label io.podman.compose.version=0.0.1 --label com.docker.compose.container-number=1 --label com.docker.compose.service=test-container -e PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/tmp/my_binaries" -v /tmp/my_binaries:/tmp/my_binaries:Z --add-host test-container:127.0.0.1 --add-host tests_test-container_1:127.0.0.1 python:3.9-slim /tmp/my_binaries/my-binary
6560b3335990700d0cec69a103404cadab52bbfd436e90347032bb6716265e94
0
podman start -a tests_test-container_1
Hello World
0