Docker compose: 无法启动容器,因为它找不到本地存在的文件

Docker compose: failing to start container, as it fails to find file, which exists locally

所以我正在尝试使用 dokcer compose 实用程序来为 W​​eb 应用程序和数据库启动容器。

我在与 app 目录相同的目录中有 docker-compose.yml 文件,其中包含 package.json 文件,所以它看起来像这样(为简洁起见,省略了其余文件) :

- docker-compose.yml
- app/
    - package.json

docker 撰写非常基础:

version: "3.7"

services:
    app:
        image: node:12-alpine
        command: sh -c "yarn install && yarn run dev"
        ports:
            - 3000:3000
        working_dir: /app
        volumes:
            - ./:/app
        environment:
            MYSQL_HOST: mysql
            MYSQL_USER: root
            MYSQL_PASSWORD: sa
            MYSQL_DB: todos
            
    mysql:
        image: mysql:latest
        volumes:
            - todo-mysql-data:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: sa
            MYSQL_DATABASE: todos
            
volumes:
    todo-mysql-data:

然后,当我尝试使用 docker-compose up -d 命令 运行 容器时,我看到 DB 容器成功启动,但 Web 应用程序容器无法启动。在使用 docker logs 检查时,我看到日志:

Couldn't find a package.json file in "/app"

由于我对 docker 和 docker 完全陌生,所以我真的不知道它到底在哪里定义以及如何解决它。

虽然看起来非常基本和简单...

假设您从下面列出的顶级目录上传:

- docker-compose.yml
- app/
    - package.json

您正在安装此处定义的目录内容:

        volumes:
            - ./:/app

这反过来导致 /app 目录包含 app 目录,因此它看起来像 /app/app/package.json.

您可以像这样调整音量安装来解决这个问题:

        volumes:
            - ./app/:/app