最近从 Docker Desktop 切换到 Podman,一切都很顺利,除了当我想将主机卷挂载到容器中时。例如
\n\xe2\x9e\x9c ~ podman run --name nginx -v ~/bin/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d -p 8080:80 nginx\nError: statfs /Users/rb/bin/nginx/nginx.conf: no such file or directory\n\n\xe2\x9e\x9c ~ ls -lt ~/bin/nginx/nginx.conf \n-rw-r--r-- 1 rb staff 490 Apr 23 14:31 /Users/rb/bin/nginx/nginx.conf\nRun Code Online (Sandbox Code Playgroud)\n主机文件~/bin/nginx/nginx.conf确实存在,那么这里有什么问题呢?
我正在尝试使用 Podman 进行本地开发。我的想法是使用本地文件夹并将其与我将运行应用程序的容器同步。
我发现,-v如果我使用 Docker,我将使用的选项可以与服务器计算机一起使用,正如文档中所述-v Bind mount a volume into the container. Volume src will be on the server machine, not the client。因此,当我使用该选项时,该文件夹未安装,并且当我使用以下命令访问它时找不到它podman exec -it application bash
我有办法解决这个问题吗?我想要相当于:
docker run -v localFolder:/remoteFolder application
其中localFolder是我本地计算机中的路径,它将映射到remoteFolder容器上
在执行docker push或拉动图像时,Docker如何确定图像名称中是否存在注册服务器,或者它是默认注册表(例如Docker Hub)上的路径/用户名?
我从1.1图像规范中看到以下内容:
标签
标记用于将描述性的,用户指定的名称映射到任何单个图像ID.标签值仅限于字符集[a-zA-Z_0-9].
知识库
在公共前缀(名称组件:)之前分组的标签集合.例如,在标记为my-app:3.1.4的图像中,my-app是名称的Repository组件.存储库名称由斜杠分隔的名称组件组成,可选地以DNS主机名为前缀.主机名必须遵循标准DNS规则,但可能不包含_字符.如果存在主机名,则可以选择后跟以下格式的端口号:8080.名称组件可能包含小写字符,数字和分隔符.分隔符定义为句点,一个或两个下划线,或一个或多个破折号.名称组件不能以分隔符开头或结尾.
对于DNS主机名,是否需要使用点完全限定,或者"my-local-server"是否为有效的注册表主机名?对于名称组件,我看到句点有效,这意味着"team.user/appserver"是有效的图像名称.如果注册表服务器在端口80上运行,因此图像名称中的主机名上不需要端口号,则主机名和注册表服务器上的路径之间似乎存在歧义.我很好奇Docker如何解决这种模棱两可的问题.
我一直在贝壳世界被宠坏了,我可以做:
./lua <<EOF
> x="hello world"
> print (x)
> EOF
hello world
Run Code Online (Sandbox Code Playgroud)
现在我试图在C应用程序中包含一个Lua脚本,我希望它会随着时间的推移而增长.我从一个简单的开始:
const char *lua_script="x=\"hello world\"\n"
"print(x)\n";
luaL_loadstring(L, lua_script);
lua_pcall(L, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但这有几个缺点.首先,我必须逃避换行和引用.但是现在我在string length ‘1234’ is greater than the length ‘509’ ISO C90 compilers are required to support使用gcc进行编译时遇到了警告,我想保持这个程序不仅是自包含的,而且可以移植到其他编译器中.
在C程序中包含大型Lua脚本的最佳方法是什么,而不是作为单独的文件提供给最终用户?理想情况下,我想将脚本移动到单独的*.lua文件中以简化测试和更改控制,并将该文件以某种方式编译到可执行文件中.
由于我有 fedora,我尝试运行他们教程中的 nginx 示例,但我没有让 nginx 显示任何内容。
当我运行这个容器时:
podman run --name mynginx1 -p 8080:80 -d nginx
Run Code Online (Sandbox Code Playgroud)
我收到欢迎来到 nginx!页。
但是当我尝试运行安装了目录的示例时:
podman run --name mynginx2 \
--mount type=bind,source=/home/simon/Dokumente/podman/nginx/content,target=/usr/share/nginx/html \
-p 9080:80 -d nginx
Run Code Online (Sandbox Code Playgroud)
我还收到欢迎来到 nginx!页,但我index.html在该源目录中有一个文件。
该容器有什么问题?
早上好/下午好/晚上好!你能帮我吗?
我正在使用 RHEL 8.2,该版本不支持 Docker。我安装了 Podman,一切正常,直到我使用以下命令:
$(aws ecr get-login --no-include-email --region us-east-1)
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用,因为它来自 Docker(我以为它来自 AWS Cli)。
错误是:
# $(aws ecr get-login --no-include-email --region us-east-1)
-bash: docker: command not found
Run Code Online (Sandbox Code Playgroud)
我一直在寻找答案,有些人使用了这样的命令:
podman login -u AWS -p ....
Run Code Online (Sandbox Code Playgroud)
但我尝试了一些标志和图像,但没有任何效果!
podman 的等效命令是什么?
谢谢!
在一台使用 Podman 运行容器的服务器上,我刚刚意识到,有许多处于“已退出”状态的容器,并且想要一次性删除所有容器。
我怎样才能用 Podman 做到这一点?
我们的构建代理正在运行 Podman 3.4.2,并且每个终端会话都有一个全局别名,只需将 docker 替换为 podman,因此该命令docker --version会产生podman version 3.4.2结果。
目标是使用 podman 来执行Docker@2Azure DevOps 管道中的任务:
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: aspnet-web-mhi
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
Run Code Online (Sandbox Code Playgroud)
事实证明我的假设有点天真,这会起作用,因为 ado_agent 没有这些:
##[错误]未处理:无法找到可执行文件:“docker”。请验证文件路径是否存在,或者是否可以在 PATH 环境变量指定的目录中找到该文件。还要检查文件模式以验证文件是否可执行。
有没有一种方法可以让替换工作顺利进行?如果可以避免的话,我会避免自己编写所有脚本以使用 podman 而不是 docker 并将其推送到注册表。
我创建了一个交叉编译容器映像,其中包含针对不同目标平台(裸机 Arm 核心、MINGW/Windows、armhf/Raspberry Pi)的构建环境。
以下所有内容均在 Intel NUC 8i7BEH 上的 Manjaro Linux 下完成。我以普通用户身份登录。
构建镜像已经揭示了 docker 和 podman 之间巨大的性能差异。在我性能相当低的机器上,我发现 docker 构建的运行速度比使用 podman 完成相同任务快了 6 倍以上。
docker build - 4 min 36 sec
podman build > 25 minutes
Run Code Online (Sandbox Code Playgroud)
为单个目标构建我的应用程序然后平均使用:
podman - 73 sec
docker - 4.9sec
Run Code Online (Sandbox Code Playgroud)
在同一台机器上进行本机构建平均需要 3 秒。
启动容器镜像以按顺序构建适用于 3 个不同平台的应用程序需要(平均):
podman - 85 sec
docker - 13 sec
Run Code Online (Sandbox Code Playgroud)
如何解释容器性能的巨大差异?我可以做些什么来提高 podman 的性能,以便它至少进入与 docker 相同的区域吗?我宁愿使用 podman 而不是 docker。我更喜欢 podman 提供的无服务设置以及无根容器。
谢谢斯特凡
我在 podman 上启动机器时遇到问题 我正在使用 ubuntu 20.04 服务器 我像这样安装了 podman
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key" | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install podman
Run Code Online (Sandbox Code Playgroud)
podman 版本是
podman version
Version: 3.4.2
API Version: 3.4.2
Go Version: go1.16.6
Built: Thu Jan 1 00:00:00 1970
OS/Arch: linux/amd64
Run Code Online (Sandbox Code Playgroud)
我需要启动 podman 机器,但出现错误
我正在这样创作
root@ubuntu:# podman machine init
Extracting compressed file
root@ubuntu:# podman machine list
NAME VM TYPE CREATED LAST UP CPUS MEMORY …Run Code Online (Sandbox Code Playgroud) podman ×8
amazon-ecr ×1
azure-devops ×1
c ×1
docker ×1
linux ×1
lua ×1
mount ×1
redhat ×1
ubuntu ×1