英文:
Building small container for running compiled go code
问题
从https://docs.docker.com/articles/baseimages/中,我正在尝试构建一个基础镜像来运行编译的Go代码,源自https://github.com/tianon/dockerfiles/tree/master/true。
- 我尝试将true.go复制到Docker中,然后执行时出现错误:"exec: "/true": permission denied"。
- 我还尝试通过bash进入其中,然后执行时出现错误:"bash: executable file not found in $PATH"。
- 我还尝试使用debootstrap raring raring > /dev/null,然后执行时出现错误:"bash: executable file not found in $PATH"。
你如何解决这个问题?
谢谢。
英文:
From
https://docs.docker.com/articles/baseimages/
I am trying to build a base image to run compiled go code, from:
https://github.com/tianon/dockerfiles/tree/master/true
- I have tried to copy into docker the true.go<br>Then: exec: "/true": permission denied
- Also tried to bash into it, then: "bash"<br>Then: executable file not found in $PATH
- Also tried to use the debootstrap raring raring > /dev/null <br> Then: "bash": executable file not found in $PATH
How do you do this?
Thanks
答案1
得分: 2
我不确定我完全理解。
链接项目中的Dockerfile构建了一个只包含可执行文件的镜像 - 没有shell或编译器,因此无法运行bash。它通过使用特殊的scratch
基础镜像来实现,该镜像只是一个完全空的文件系统。
如果你克隆该存储库并使用Dockerfile构建镜像(docker build -t go-image .
),它将直接将可执行文件复制到镜像中(注意Dockerfile复制的是可执行文件true-asm
,而不是源代码true.go
)。然后,如果你使用docker run
启动镜像,它将运行该可执行文件(docker run go-image
)。
这样说清楚了吗?代码是在本地编译的(或由另一个容器编译),然后将编译后的独立可执行文件放入镜像中。
一般来说,你不应该这样做,尤其是在刚开始学习时 - 使用包含基本工具(如shell)的golang
或debian
镜像会更容易。
英文:
I'm not sure I entirely follow.
The Dockerfile from the linked project builds an image with nothing in it except an executable - there will be no shell or compiler, so running bash will be impossible. It does this by using the special scratch
base image, which is simply a completely empty filesystem.
If you clone the repository and build the image using the Dockerfile (docker build -t go-image .
), it will simply copy the executable directly into the image (note the Dockerfile copies the executable true-asm
, not the source code true.go
). If you then use docker run
to start the image, it will run it (docker run go-image
).
Does that make sense? The code is compiled locally (or by another container) and the compiled, stand-alone executable is placed by itself into the image.
Generally, you don't want to do this and definitely not when you're beginning - it will be easier for you to use a golang
or debian
image which will include basic tools such as a shell.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论