我正在尝试将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地址却找不到页面
答案 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端口”查看实际映射)