我正在尝试在 RHEL 8.3 上使用无根 podman 公开端口 8080。
我使用的podman版本是:
$ podman --version
podman version 2.2.1
Run Code Online (Sandbox Code Playgroud)
我正在使用一个简单的FlaskAPI 来测试它:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from the container!\n"
if __name__ == "__main__":
app.run(host="0.0.0.0")
Run Code Online (Sandbox Code Playgroud)
容器文件如下所示:
FROM python:3.6-alpine
RUN pip3 install flask
COPY app.py app.py
EXPOSE 5000
ENTRYPOINT python3 app.py
Run Code Online (Sandbox Code Playgroud)
我正在使用以下方法构建图像:
FROM python:3.6-alpine
RUN pip3 install flask
COPY app.py app.py
EXPOSE 5000
ENTRYPOINT python3 app.py
Run Code Online (Sandbox Code Playgroud)
我正在创建一个 Pod 并在该 Pod 中启动一个容器
$ podman build -t testapi .
Run Code Online (Sandbox Code Playgroud)
所有容器都按预期运行:
$ podman pod create --name testpod -p 8080:5000
$
$ podman run -d --rm --name testapi --pod testpod testapi
Run Code Online (Sandbox Code Playgroud)
但是,我无法连接到该端口:
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85289290cc7a localhost/testapi:latest 3 seconds ago Up 2 seconds ago 0.0.0.0:8080->5000/tcp testapi
4b1ac2354a1a k8s.gcr.io/pause:3.2 About a minute ago Up 3 seconds ago 0.0.0.0:8080->5000/tcp 81aa31a38084-infra
Run Code Online (Sandbox Code Playgroud)
当我使用 netstat 查看正在使用哪个端口时,我得到以下信息:
$ telnet <IP> 8080
Trying <IP>...
telnet: Unable to connect to remote host: No route to host
Run Code Online (Sandbox Code Playgroud)
使用 lsof 我得到:
$ netstat -tulpn | grep LISTEN
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN 638593/containers-r
tcp6 0 0 :::22 :::* LISTEN -
Run Code Online (Sandbox Code Playgroud)
当我使用 rootfull podman 做同样的事情时,它有效,即:
$ lsof -i -P -n | grep LISTEN
exe 638593 ds 13u IPv6 593362 0t0 TCP *:8080 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
现在的回应是:
$ sudo podman pod create --name testpod -p 8080:5000
$ sudo podman run -d --rm --name testapi --pod testpod testapi
Run Code Online (Sandbox Code Playgroud)
网络统计返回:
$ telnet 10.100.2.220 8080
Trying 10.100.2.220...
Connected to 10.100.2.220.
Run Code Online (Sandbox Code Playgroud)
和lsof:
$ netstat -tulpn | grep LISTEN
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Run Code Online (Sandbox Code Playgroud)
有没有办法使用无根 podman 公开端口,以便我可以从 podman 主机访问它?
小智 4
使用 rootless pod 时请仔细检查此步骤:
$ telnet 8080 正在尝试... telnet:无法连接到远程主机:没有到主机的路由
我重现了你的环境和你的形象,没有发现任何问题。
PS:可能与firewalld有关,尝试打开8080端口。
# firewall-cmd --add-port=8080/tcp --permanent
# firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8407 次 |
| 最近记录: |