yesod二进制文件希望在哪里findconfig文件夹?

问题描述

我正在创build一个docker容器来运行haskell二进制文件。 有问题的二进制文件是用yesod构build的网站。 当容器启动时,它看起来很有前途,但是却失败了:

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

重新创build步骤

该二进制文件的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线是非常重要的,因为它将二进制文件连同静态和configuration目录一起加载到容器中。 我已经检查过他们肯定是在那里,所以容器文件结构看起来像这样:

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

连接到数据库似乎正在工作,因为我在日志中看到这样的一些行

 binary_1 | Migrating: ALTER TABLE "blog" ALTER COLUMN "title" TYPE varchar(50) 

在我看到错误消息之前。

我怀疑我需要将config文件夹移动到二进制文件希望find它的替代位置,或者在构build它之前在yesod应用程序中的某处设置一个环境variables。 我一直无法find预期的位置或正确的环境variables设置到目前为止。 有谁知道我错过了什么?

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

有关在构build图像时设置默认CWD WORKDIR信息,请访问https://docs.docker.com/engine/reference/builder/#workdir

有关在运行时设置Compose working_dir信息,请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 。