首页 > 解决方案 > 将 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。

标签: dockerdocker-compose

解决方案


正如 Wie 在评论中已经指出的那样,您没有--dockerdocker-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

推荐阅读