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 。