运行的镜像 nginx:v1不是一个标准的 Linux 发行版基础镜像(比如 ubuntu, centos, alpine),而是一个专门为运行 Nginx 服务而构建的精简镜像。这类镜像的启动命令(ENTRYPOINTCMD)被设置为直接启动 nginx 进程,而不是一个 shell。

当你执行:

docker run -it --name TEST nginx:v1 /bin/bash

Docker 会尝试把 /bin/bash 当作参数传递给 nginx 命令,即实际执行的是:

nginx /bin/bash

nginx 程序根本不认识 /bin/bash 这个参数,所以报错 invalid option


✅ 正确解决方案

✅ 方法一:覆盖 CMD,使用 --entrypoint 指定 shell

你想进入容器的 shell,就必须绕过默认的 nginx 启动命令,使用 --entrypoint 来强制指定 /bin/sh/bin/bash

docker run -it --name TEST --entrypoint /bin/sh nginx:v1

或者如果镜像有 bash:

docker run -it --name TEST --entrypoint /bin/bash nginx:v1

⚠️ 注意:大多数轻量级 nginx 镜像基于 alpine,默认 shell 是 /bin/sh,没有 bash。所以优先尝试 /bin/sh

✅ 方法二:先运行容器,再进入

如果你已经用默认命令启动了 nginx 容器(后台运行),可以先启动它,再 exec 进去:

# 启动 nginx 容器(后台)
docker run -d --name TEST nginx:v1

# 进入正在运行的容器
docker exec -it TEST /bin/sh

这是最常用、最推荐的方式。


🔍 验证镜像信息

你可以检查这个 nginx:v1 镜像是什么:

docker inspect nginx:v1

查看 EntrypointCmd 字段,很可能是:

"Entrypoint": ["nginx", "-g", "daemon off;"]

这说明它一启动就执行 nginx,不会给你 shell。


✅ 总结

问题

解决方案

nginx: invalid option: "/bin/bash"

不能直接传 /bin/bash,因为会被当作 nginx 参数

想要进入 nginx 容器的 shell

使用 docker exec -it container_name /bin/sh

想要启动时就进入 shell

使用 --entrypoint /bin/sh 覆盖默认命令


✅ 推荐操作流程

# 1. 启动 nginx 容器(后台)
docker run -d --name TEST nginx:v1

# 2. 进入容器
docker exec -it TEST /bin/sh

# 3. 查看系统信息(可选)
/ # cat /etc/os-release   # 查看是哪个 Linux 发行版
/ # ps aux               # 查看 nginx 是否在运行

这样你就可以安全地调试容器内容了。