kzf*_*fid 9 docker docker-entrypoint
我们可以有一个没有入口点的 {docker run} 命令吗?据我所知,必须有一个入口点(如果未指定,则在大多数情况下应默认为“bash”)。否则,我无法将图像作为容器运行。
假设我在物理机上安装 Linux。
有一个后台服务在后台运行,监听端口然后做一些事情。
在我登录之前,没有运行 bash shell,我仍然可以通过名称和端口从另一台计算机调用后台服务。
我可以通过 {docker run} 做类似的事情吗?这意味着,我不需要入口点(或者入口点是系统进程而不是 bash?),只需让容器系统及其后台服务启动并运行即可。
Dav*_*aze 11
如果您的docker run容器没有任何特殊的入口点或命令选项,它将运行由其图像ENTRYPOINT和CMD指令指定的单个命令。这应该是运行容器的常用方式。例如:
# Launches a PostgreSQL server, without manually specifying a command
docker run \
-d -p 5432:5432 -v pgdata:/var/lib/postgresql/data \
postgres:14
Run Code Online (Sandbox Code Playgroud)
图像名称后面放置的任何内容都会覆盖CMD图像中的 。您可以使用它进行各种有用的调试,或者在同一代码库上运行多个容器。
docker build -t django-image .
# What's in that image?
docker run --rm django-image \
ls -l /app
# Get an interactive shell in a temporary container
docker run --rm -it django-image \
bash
# Launch the Django server normally
docker run -d --name web -p 8000:8000 django-image
# Also launch a Celery worker off that same image
docker run -d --name worker django-image \
celery worker
Run Code Online (Sandbox Code Playgroud)
您通常不需要该docker run --entrypoint选项。由于它是一个 Docker 选项,因此它需要出现在映像名称之前,并且它所采用的任何选项都出现在映像名称之后的“命令”槽中。
# This syntax is awkward, design to avoid it
docker run --rm \
--entrypoint ls \
django-image \
-l /app
Run Code Online (Sandbox Code Playgroud)
在你的 Dockerfile 中ENTRYPOINT是完全可选的。如果您认为您将需要上面建议的任何命令覆盖形式(包括初始开发期间的调试),请优先设置CMD和 not 。ENTRYPOINT
# no ENTRYPOINT
CMD python ./manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
不要设置ENTRYPOINT为像这样的解释器python,并将命令的其余部分放入CMD; 这显然是有效的,但将命令限制为仅 Python 脚本,因此您被迫对docker run --entrypoint其他任何内容进行尴尬的设置。
如果你确实 set ENTRYPOINT,我发现最有用的设置是让它成为一个包装器 shell 脚本,它执行一些初始设置,然后以exec "$@"运行任何内容结束CMD。即使对于各种命令覆盖形式,这也适用,这些形式仍然运行包装器脚本,但最后运行用户提供的命令。DockerfileENTRYPOINT行必须是 JSON 数组(“exec 语法”)才能正常工作。
我的一个例外是在为 Go 程序构建微图像时,除了编译的程序本身之外,实际上不包含任何内容。镜像中既没有 shell,也没有任何其他工具,除了运行一个程序之外,无法执行任何操作。仅在这种情况下,我将设置ENTRYPOINT为已编译的二进制文件的路径;它仍然必须是一个 JSON 数组。
BIP*_*DOL -2
您不需要任何入口点来运行 docker 映像。您可以按照命令运行图像。如果您的 dockerfile 默认包含入口点,则将其删除。
docker run image_name
Run Code Online (Sandbox Code Playgroud)
还可以在此处共享 docker 文件,这可能会帮助人们更好地回答您的问题。
| 归档时间: |
|
| 查看次数: |
27002 次 |
| 最近记录: |