我刚刚开始学习Docker,遇到了这个不知道怎么回事的问题。
我的Dockerfile如下所示:
FROM node:7.0.0
WORKDIR /app
COPY app /app
COPY hermes-entry /usr/local/bin
RUN chmod +x /usr/local/bin/hermes-entry
COPY entry.d /entry.d
RUN npm install
RUN npm install -g gulp
RUN npm install gulp
RUN gulp
我的docker-compose.yml看起来像这样:
version: '2'
services:
hermes:
build: .
container_name: hermes
volumes:
- ./app:/app
ports:
- "4000:4000"
entrypoint: /bin/bash
links:
- postgres
depends_on:
- postgres
tty: true
postgres:
image: postgres
container_name: postgres
volumes:
- ~/.docker-volumes/hermes/postgresql/data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: password
ports:
- "2345:5432"
启动容器后: docker-compose up -d
我尝试运行一个简单的bash cmd: docker-compose run hermes ls
得到错误:/ bin / ls无法执行二进制文件
关于我做错了什么的任何想法?
谢谢!
答案 0 :(得分:2)
容器的entrypoint
是bash
。默认情况下,bash期望将shell脚本作为其第一个参数,但是/bin/ls
是二进制文件,如错误所示。如果要运行/bin/ls
,则需要使用-c /bin/ls
作为命令。 -c
告诉bash,其余参数是命令行而不是脚本的路径,并且命令行恰巧是运行/bin/ls
的请求。
答案 1 :(得分:0)
您无法在一个容器中同时运行Gulp和Node。容器应始终各有一个进程。
如果您只想让节点提供文件,请从hermes服务中删除您的入口点。
您可以添加其他服务来运行gulp,如果您正在运行测试,则必须映射相同的卷并添加命令:[" gulp"]
您需要从dockerfile中删除RUN gulp(除非您使用它来构建节点文件)
然后运行docker-compose up