【发布时间】:2016-04-09 11:25:49
【问题描述】:
问题描述
我正在创建一个 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 应用程序中的某处设置环境变量。到目前为止,我一直无法找到要设置的预期位置或正确的环境变量。有谁知道我错过了什么?
【问题讨论】:
-
错误消息使它看起来像是在当前工作目录 (
CWD) 的相对路径中查找config/client_session_key.aes。是否像在 compose YAML 中指定Dockerfile或working_dir中的WORKDIR到/opt/server一样简单? -
@AndyShinn,先生,您赢了。 WORKDIR 没有做到这一点,但
working_dir做到了。请将此添加为答案,我会接受。
标签: haskell docker yesod docker-compose