pyp*_*ism 8 docker dockerfile docker-compose
我第一次尝试使用docker进行开发.我有一个节点应用程序.我想从docker运行应用程序.这是我的dockerfile:
FROM node:6.0.0-slim
MAINTAINER pyprism
# Prepare app directory
RUN mkdir -p /src/
# Install dependencies
WORKDIR /src/
VOLUME .:/src/
RUN npm install
# Build the app
# RUN npm build
# Expose the app port
EXPOSE 8000
# Start the app
CMD npm start
Run Code Online (Sandbox Code Playgroud)
和docker-compose文件:
web:
build: .
ports:
- '8000:8000'
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时docker-compose up 我得到了这个错误:
Building web
Step 1 : FROM node:6.0.0-slim
---> 7bf50b1ad9da
Step 2 : MAINTAINER pyprism
---> Running in d1defd389fe6
---> b684686c614d
Removing intermediate container d1defd389fe6
Step 3 : RUN mkdir -p /src/
---> Running in 36b64560f88f
---> 8eb6847d67e4
Removing intermediate container 36b64560f88f
Step 4 : WORKDIR /src/
---> Running in 00d4c1fd2cf5
---> 88a54e6af176
Removing intermediate container 00d4c1fd2cf5
Step 5 : VOLUME .:/src/
---> Running in dc0e9d9d973a
---> b558f03ce63c
Removing intermediate container dc0e9d9d973a
Step 6 : RUN npm install
---> Running in 09445786b71e
npm info it worked if it ends with ok
npm info using npm@3.8.6
npm info using node@v6.0.0
npm info lifecycle undefined~preinstall: undefined
npm info linkStuff !invalid#1
npm info lifecycle undefined~install: undefined
npm info lifecycle undefined~postinstall: undefined
npm info lifecycle undefined~prepublish: undefined
npm WARN enoent ENOENT: no such file or directory, open '/src/package.json'
npm WARN src No description
npm WARN src No repository field.
npm WARN src No README data
npm WARN src No license field.
npm info ok
---> 8c544294e6c5
Removing intermediate container 09445786b71e
Step 7 : EXPOSE 8000
---> Running in 965e192bc67e
---> daaf52fac6ca
Removing intermediate container 965e192bc67e
Step 8 : CMD npm start
---> Running in 890549e3aea7
---> 19a3dc786cee
Removing intermediate container 890549e3aea7
Successfully built 19a3dc786cee
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating redux_web_1
Attaching to redux_web_1
web_1 | npm info it worked if it ends with ok
web_1 | npm info using npm@3.8.6
web_1 | npm info using node@v6.0.0
web_1 | npm ERR! Linux 4.4.0-22-generic
web_1 | npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start"
web_1 | npm ERR! node v6.0.0
web_1 | npm ERR! npm v3.8.6
web_1 | npm ERR! path /src/package.json
web_1 | npm ERR! code ENOENT
web_1 | npm ERR! errno -2
web_1 | npm ERR! syscall open
web_1 |
web_1 | npm ERR! enoent ENOENT: no such file or directory, open '/src/package.json'
web_1 | npm ERR! enoent ENOENT: no such file or directory, open '/src/package.json'
web_1 | npm ERR! enoent This is most likely not a problem with npm itself
web_1 | npm ERR! enoent and is related to npm not being able to find a file.
web_1 | npm ERR! enoent
web_1 |
web_1 | npm ERR! Please include the following file with any support request:
web_1 | npm ERR! /src/npm-debug.log
redux_web_1 exited with code 254
Run Code Online (Sandbox Code Playgroud)
Mar*_*one 10
这不是在dockerfile中使用指令VOLUME的正确方法.正如文档所说:"VOLUME指令创建一个具有指定名称的挂载点,并将其标记为从本机主机或其他容器中保存外部安装的卷",我认为这不是您想要做的.
您不需要指定VOLUME指令,也不需要创建src directoy.修改Dockerfile如下:
FROM node:6.0.0-slim
MAINTAINER pyprism
# Install dependencies
WORKDIR /src/
RUN npm install
# Expose the app port
EXPOSE 8000
# Start the app
CMD npm start
Run Code Online (Sandbox Code Playgroud)
现在您可以导航到Dockerfile目录并构建映像:
$docker build -t node .
Run Code Online (Sandbox Code Playgroud)
然后使用-v选项运行容器以装入本地目录,如下所示:
$docker run -p 8000:8000 -v path/to/code/dir:/src/ <image-name>
Run Code Online (Sandbox Code Playgroud)
这将在/ src中挂载您的代码目录.
如果你想使用docker compose,只需在docker-compose.yml文件中指定卷:
web:
build: .
volumes:
- path/to/code/dir:/src/
ports:
- '8000:8000'
Run Code Online (Sandbox Code Playgroud)
我添加这个答案是为了防止所接受的解决方案对其他人不起作用,因为它对我不起作用。尽管我承认我不是 Docker 也不是节点专家。
这就是我所拥有的:Dockerfile
FROM node
WORKDIR /usr/src/
RUN npm install
EXPOSE 4200
CMD npm start
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: "3.2"
services:
frontend:
ports:
- "4200:4200"
volumes:
- ./frontend/:/usr/src
Run Code Online (Sandbox Code Playgroud)
为了使它对我有用,我必须RUN npm install从 Dockerfile 中删除并将 cmd 更改为CMD npm install && npm start
我认为问题在于 RUN 执行时未安装该卷,而是仅在 CMD 之前安装。另请注意,编辑 Dockerfile 后必须重新构建映像。
这确实对我有用,但同样,我不是专家。因此,如果有人有任何想法或想法,请随时在评论中解释或编辑以改进答案。
您不能VOLUME .:/src/在 dockerfile 中执行此操作。在 dockerfile 中指定主机挂载点是不合法的语法,因为它会使它依赖于主机。将卷映射定义移动到您的docker-compose.yml文件中。
| 归档时间: |
|
| 查看次数: |
6823 次 |
| 最近记录: |