尝试详细运行docker容器或docker exec时,在$ PATH中找不到错误可执行文件

时间:2018-08-05 04:16:59

标签: docker vuejs2 dockerfile

我正在尝试将vue-js应用容器化:以下是我的docker文件:

FROM node:9.11.1-alpine

# install simple http server for serving static content
RUN npm install -g http-server

# make the 'app' folder the current working directory
WORKDIR /app

# copy both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./

# install project dependencies
RUN npm install

# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . .

# build app for production with minification
RUN npm run build

EXPOSE 8080
CMD [ "http-server", "dist" ]

当我尝试使用详细标志-v运行docker时,出现此错误:

$ docker run -it vue-js-app -v
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: \"-v\": executable file not found in $PATH".

并且没有-v标志,我得到以下信息:

$ docker run -it vue-js-app
Starting up http-server, serving dist
Available on:
  http://127.0.0.1:8080
  http://172.17.0.3:8080
Hit CTRL-C to stop the server

,然后如果我尝试输入容器:

$ docker exec -it 0778c0e3ae05  bash
oci runtime error: exec failed: container_linux.go:265: starting container process caused "exec: \"bash\": executable file not found in $PATH"

我遇到同样的错误,但是使用端口我导航到IP地址却找不到页面

2 个答案:

答案 0 :(得分:3)

ForEach-Object命令的格式为:

docker container run

因此,当您执行Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] 时,docker run -it vue-js-app -v将作为命令传递到容器,从而替换Dockerfile(-v)中指定的命令。由于容器中没有名为CMD [ "http-server", "dist" ]的命令,因此导致出现消息“在$ PATH中找不到可执行文件”。

如果您尝试将-v传递给-v,则必须重复Dockerfile中的现有命令。

http-server

这将在容器中运行docker container run -it vue-js-app http-server dist -v

关于在容器中执行shell,在$ PATH中找不到bash,因为未在映像中安装bash。 http-server dist -v基于Alpine Linux,它使用node:9.11.1-alpine作为默认Shell。因此,您应该使用ash在正在运行的容器中执行Shell进程。

ash

答案 1 :(得分:0)

您写道:“遇到相同的错误,但使用端口我导航到IP地址却找不到页面”。

这是因为您没有映射端口。您可以对它进行曝光,但是您也应该对其进行映射。在docker docs中的标题下的run命令的参考中找到信息:  暴露(入港): https://docs.docker.com/v1.13/engine/reference/run/

  

-P:将所有公开的端口发布到主机接口。   -p = []:将容器的端口或一系列端口发布到主机                  格式:ip:hostPort:containerPort | ip :: containerPort | hostPort:containerPort | containerPort                  hostPort和containerPort都可以指定为                  端口范围。当同时指定两个范围时,                  范围内的集装箱端口数量必须与                  范围内的主机端口数,例如:-p 1234-1236:1234-1236 / tcp   仅为hostPort指定范围时,                  containerPort不得为范围。在这种情况下                  容器端口发布在                  指定的hostPort范围。 (例如-p 1234-1236:1234/tcp)(使用“ docker端口”查看实际映射)