使用 Docker Compose 时无法使用 GitBash 执行到容器中

Cannot exec into container using GitBash when using Docker Compose

我是 Docker Compose 的新手,但已使用 Docker 多年。下面的屏幕截图是 PowerShell 和 GitBash 的。如果我 运行 没有 docker-compose 的容器,我可以 docker exec -it <container_ref> /bin/bash 这些 shell 中的任何一个都没有问题。 但是,当 运行ning 使用 docker-compose up 时,两个 shell 在尝试使用 docker-compose exec 时都不会报错。他们都只是挂了几秒钟,然后 return 进行提示。 最后,出于某种原因,我在使用我所知道的内容时确实在 GitBash 中遇到错误:docker exec...。我已经使用它很多年了,所以我很困惑,post 想问一个问题。 Docker Compose 做什么会扰乱 GitBash docker 功能,但不会扰乱 PowerShell?而且,为什么在使用 docker-compose exec... 时挂起,但没有错误?

我在 docker-compose.yml 中使用 tty: true,但老实说,这似乎没有什么不同。不要在一个 post 中抛出一堆问题,但不管发生了什么,这也可能是我无法在浏览器中仅在使用 Docker Compose to [=33 时访问我的网络服务器的原因=]吗?

version: '3.8'

volumes:
  pgdata:
     external: true   

services:
    db:
        image: postgres
        container_name: trac-db
        tty: true
        restart: 'unless-stopped'
        environment:
            POSTGRES_PASSWORD: postgres
            POSTGRES_USER: postgres
            POSTGRES_DB: iol
        volumes:
            - pgdata:/var/lib/postgresql/data
        network_mode: 'host'
        expose:
            - 5432
    web:
        image: lindben/trac-server
        container_name: trac-server
        tty: true
        restart: 'unless-stopped'
        environment:
            ADDRESS: localhost
            PORT: 3000
            NODE_ENV: development
        depends_on:
            - db
        network_mode: 'host'
        privileged: true
        expose:
            - 1234
            - 3000
    ```

我假设您使用的是 Docker for Desktop and so the reason you can docker exec just fine using powershell is because for windows docker is a native program\command and for GitBash which is based on bash a linux shell (bash = Bourne-Again SHell) 没那么多。

所以当使用需要 tty 的 windows 命令时,你需要某种“适配器”,例如 winpty 来弥合 docker 的界面和 GitBash 的界面之间的差距一.

这里有关于winpty

更详细的解释

抛开所有这些,如果只尝试使用撰写选项,您最好建议 this question

现在,关于您的 Web 服务问题,我认为您实际上并没有使用 expose 标签公开您的应用程序。看看 docker-compose expose reference. what you need is to add a "ports" tag like so as referenced here:

db:
    ports:
      - "5432:5432"
web:
    ports:
      - "1234:1234"
      - "3000:3000"

希望这能解决您的问题 ;)