yesod二进制文件在哪里可以找到config文件夹?

时间:2016-04-09 11:25:49

标签: haskell docker yesod docker-compose

问题描述

我正在创建一个docker容器来运行haskell二进制文件。有问题的二进制文件是使用yesod构建的网站。当容器启动时看起来很有希望,但随后失败了:

config/client_session_key.aes: openBinaryFile: does not exist (No such file or directory)

重建

的步骤

二进制文件的Dockerfile非常基本。它看起来像这样:

FROM haskell:7.10.3
MAINTAINER Garry Cairns
ENV REFRESHED_AT 2015-09-05

RUN ["apt-get", "-y", "update"]
RUN ["apt-get", "-y", "install", "libpq-dev"]

我使用docker-compose将其链接到数据库。 docker-compose文件如下所示:

version: "2.0"
services:
  database:
    image: postgres
    env_file: ./database/env
  binary:
    build: ./binary
    command: /opt/server/api
    env_file: ./api/env
    links:
      - database
    tty: false
    volumes:
      - /etc/ssl/certs/:/etc/ssl/certs/
      - ./binary:/opt/server/

二进制文件的volumes行特别重要,因为它将二进制文件及其静态和配置目录加载到容器中。我已经检查过它们肯定在那里它们是,所以容器文件结构最终看起来像这样:

/opt/server
    binary_file
    /static
        ...
    /config
        client_session_key.aes
        ...

连接到数据库似乎正常工作,因为我在日志记录

中看到这样的行
binary_1   | Migrating: ALTER TABLE "blog" ALTER COLUMN "title" TYPE varchar(50)

在我看到错误消息之前。

问题

我怀疑我需要将配置文件夹移动到二进制文件期望找到它的备用位置,或者在构建之前在yesod应用程序中的某处设置环境变量。到目前为止,我无法找到预期的位置或正确的环境变量。有谁知道我错过了什么?

1 个答案:

答案 0 :(得分:1)

错误消息使其看起来像在当前工作目录(config/client_session_key.aes)的相对路径中查找CWD。是否像在WORKDIR中指定Dockerfile或在撰写YAML中将working_dir指定为/opt/server一样简单?

WORKDIR有关在图片构建时设置默认CWD的信息将为https://docs.docker.com/engine/reference/builder/#workdir

有关在运行时设置working_dir的信息,请参见https://docs.docker.com/compose/compose-file/#cpu-shares-cpu-quota-cpuset-domainname-hostname-ipc-mac-address-mem-limit-memswap-limit-privileged-read-only-restart-stdin-open-tty-user-working-dir