docker-compose run返回/ bin / ls无法执行二进制文件

时间:2016-10-30 02:46:10

标签: docker

我刚刚开始学习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无法执行二进制文件

关于我做错了什么的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:2)

容器的entrypointbash。默认情况下,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