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

6

我刚开始学习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命令:

docker-compose run hermes ls

我遇到了这个错误:

/bin/ls cannot execute binary file

我做错了什么,你有什么想法吗?

2个回答

18

你容器的入口是bash。默认情况下,bash期望一个shell脚本作为其第一个参数,但是像错误信息所说的那样,/bin/ls 是一个二进制文件。如果你想运行 /bin/ls,则需要使用 -c /bin/ls 作为你的命令。 -c 告诉bash其余的参数是一个命令行而不是脚本的路径,而命令行碰巧是一个请求运行/bin/ls


-2

在一个容器中无法同时运行Gulp和Node。每个容器应该只有一个进程。

如果你只想让Node服务提供文件,请从hermes服务中删除入口点。

如果你想要添加另一个服务来运行gulp,如果你正在运行测试,你需要映射相同的卷并添加一个命令:["gulp"]

你需要从dockerfile中删除RUN gulp(除非你正在使用它来构建你的node文件)

然后运行docker-compose up


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接