繁体   English   中英

无法读取容器中的文件

[英]Unable to Read Files in Container

这是我docker-compose.yml

version: '3.3'

services:
  etcd:
    container_name: 'etcd'
    image: 'quay.io/coreos/etcd'
    command: >
      etcd -name etcd
      -advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001
      -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001
      -initial-advertise-peer-urls http://127.0.0.1:2380
      -listen-peer-urls http://0.0.0.0:2380
    healthcheck:
      test: ["CMD", "curl", "-f", "http://etcd:2379/version"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      robotrader:

  kontrol:
    container_name: 'kontrol'
    env_file: 'variables.env'
    build:
      context: '.'
      dockerfile: 'Dockerfile'
    volumes:
      - '/certs:/certs'
    ports:
      - '6000:6000'
    depends_on:
      - 'etcd'
    networks:
      robotrader:

  mongo:
    container_name: 'mongo'
    image: 'mongo:latest'
    ports:
      - '27017:27017'
    volumes:
      - '/var/lib/mongodb:/var/lib/mongodb'
    networks:
      robotrader:

networks:
  robotrader:

...这里是Dockerfile用于构建kontrol

FROM golang:1.8.3 as builder
RUN go get -u github.com/golang/dep/cmd/dep
RUN go get -d github.com/koding/kite
WORKDIR ${GOPATH}/src/github.com/koding/kite
RUN ${GOPATH}/bin/dep ensure
RUN go install ./kontrol/kontrol
RUN mv ${GOPATH}/bin/kontrol /tmp

FROM busybox
ENV APP_HOME /opt/robotrader
RUN mkdir -p ${APP_HOME}
RUN mkdir /certs
WORKDIR ${APP_HOME}
COPY --from=builder /tmp/kontrol .
ENTRYPOINT ["./kontrol", "-initial"]
CMD ["./kontrol"]

最后,当我发出命令时...

sudo -E docker-compose -f docker-compose.yaml up

... etcdmongo成功启动,而kontrol失败并出现以下错误:

kontrol    | 2018/06/21 20:11:14 cannot read public key file: open "/certs/key_pub.pem": no such file or directory

如果我登录到容器中。

sudo docker run -it --rm --name j3d-test --entrypoint sh j3d

...并查看文件夹/certs ,文件位于:

ls -la /certs
-rw-r--r--.  1 root root 1679 Jun 21 21:11 key.pem
-rw-r--r--.  1 root root  451 Jun 21 21:11 key_pub.pem

我想念什么?

运行此命令时:

sudo docker run -it --rm --name j3d-test --entrypoint sh j3d

您不是在“登录到容器”。 您正在创建一个容器,并且正在查看基础映像上/certs的内容。 但是,在您docker-compose.yaml您具有:

kontrol:
  [...]
  volumes:
    - '/certs:/certs'
  [...]

您已将$PWD/certs的绑定装载配置到容器中的/certs目录中。 您的本地certs目录包含什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM