首页 > 解决方案 > 使用 docker-compose 挂载卷时出错

问题描述

我正在使用 docker-compose 来设置 domserver。我可以使用 dockerhub 的图像成功运行 domserver。但是,当我想将目录挂载到容器中时,它会弹出如下错误消息:

dj-domserver_1  | /scripts/start.sh: line 29: cd: /opt/domjudge/domserver: No such file or directory

https://i.stack.imgur.com/NVnWW.png

目录 domjudgeKChen 是由 dockerhub (domserver6.0.3) 的映像设置的容器中的 cp,这是 yml 文件中的 domserver 部分:

dj-domserver:
                image: domjudge/domserver:6.0.3
                volumes:
                        - /sys/fs/cgroup:/sys/fs/cgroup:ro
                        - ~/domjudgeKChen/opt/domjudge:/opt/domjudge
                environment:
                        - CONTAINER_TIMEZONE=Asia/Taipei
                        - MYSQL_ROOT_PASSWORD=rootpw
                        - MYSQL_DATABASE=domjudge
                        - MYSQL_USER=domjudge
                        - MYSQL_PASSWORD=djpw
                networks:
                        dj-db:
                        dj-judgedaemons:
                depends_on:
                  - phpmyadmin
                  - dj-mariadb
                ports:
                        - 9090:80
                links:
                        - dj-mariadb:mariadb
                restart: always

这是整个 .yml 文件代码:

http://codepad.org/7jN5UdG8

另一个问题是我无法使用这个 yml 文件设置 Judgehost。这是使用 docker-compose up 时的错误消息

error: Authentication failed (error 401) while contacting http://domserver/api/v4/judgehosts. Check credentials in restapi.secret.

https://i.stack.imgur.com/xSEjm.png

如果我在 yml 中注释掉第 22 行,并且 domserver 可以使用 docker-compose up 和 mariadb 进行设置,phpmyadmin 也可以。

请帮我将目录挂载到容器中并成功设置judgehost映像。谢谢!

标签: dockerdocker-compose

解决方案


IIRC 你必须对你的卷使用绝对引用;你不能使用~.

用绝对路径替换~卷挂载,并/domjudgeKChen/opt/domjudge在卷定义中为其添加前缀。


推荐阅读