docker - 将 docker run 转换为 docker compose
问题描述
我想转换我的 docker run 命令,但我无法让它工作。这是我使用的 docker run 命令并且运行良好
sudo docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/traefik.toml:/traefik.toml \
-v $PWD/acme.json:/acme.json \
-p 80:80 \
-p 443:443 \
-l traefik.frontend.rule=Host:monitor.localhost \
-l traefik.port=8080 \
--network traefik-proxy \
--name traefik \
traefik --docker
这是我构建的撰写文件:
version: "3"
services:
traefik:
image: traefik
container_name: traefik-2
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
labels:
traefik.frontend.rule: "Host:monitor.localhost"
traefik.port: "8080"
networks:
default:
external:
name: traefik-proxy
问题是当我使用 docker-compose 时,代理似乎正在工作,但是当我访问监控站点(monitor.localhost)时,它给了我一个 404 未找到。我已经仔细检查了所有内容,但我无法弄清楚撰写文件有什么问题。我试图进入容器的外壳,看看它看起来是否正常,但显然基于 Alpine 的 Traefik 图像没有 bash,甚至没有 sh。
解决方案
正如 Wie 在评论中已经指出的那样,您没有--docker
在docker-compose.yml
. 试试这样:
version: "3"
services:
traefik:
image: traefik
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
ports:
- 80:80
- 443:443
labels:
traefik.frontend.rule: Host:monitor.localhost
traefik.port: 8080
command: ["--docker"]
networks:
default:
external:
name: traefik-proxy
推荐阅读
- javascript - 转换为 ObjectId 失败
- flutter - Flutter:GraphQL 未处理异常:NoSuchMethodError:getter 'host' 被调用为 null
- sql-server - T-SQL:远程存储过程结果有时为空
- python - Python替换功能也没有按预期工作
- angular - 如何在 PdfMake 中传递数组以制作表格
- ruby-on-rails - Searchkick Elasticsearch - 如何使用运算符 - 和/或短语查询?
- git - 在一个分支中完成两个不同分支的更改
- haskell - 使用 optparse-applicative 制作“可选”解析器并为递归数据类型构造值
- python - 如何将宝藏数据查询的结果放入熊猫数据框中?
- php - 如何调试 Codeigniter 4