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

问题描述 投票:0回答:1

我是 Docker Compose 的新手,但已经使用 Docker 多年。下面的屏幕截图是 PowerShell 和 GitBash 的。如果我在没有 docker-compose 的情况下运行容器,我可以

docker exec -it <container_ref> /bin/bash
这些 shell 中的任何一个都没有问题。 但是,当使用
docker-compose up
运行时,两个 shell 在尝试使用
docker-compose exec
时都不会出错。他们都只是挂了几秒钟,然后返回到提示符。 最后,出于某种原因,我在使用我所知道的东西时确实在 GitBash 中遇到错误:
docker exec...
。我已经用了很多年了,所以我很困惑并提出了一个问题。 Docker Compose 做了什么会扰乱 GitBash docker 功能,但不会扰乱 PowerShell?而且,为什么使用
docker-compose exec...
时挂起,但没有错误?

我在 docker-compose.yml 中使用

tty: true
,但老实说这似乎没有什么不同。不要在一篇文章中抛出一堆问题,但不管发生了什么,这也可能是我无法在浏览器中仅在使用 Docker Compose 运行它时访问我的 Web 服务器的原因吗?

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 powershell docker-compose git-bash
1个回答
2
投票

问题说明

我假设你正在使用 Docker for Desktop 所以你可以

docker exec
使用 PowerShell 的原因是因为 PS 和 Docker for Desktop 都是为 Windows 构建的,而 GitBash 是基于 bash它不是在 Windows 中本地使用,而是在 Linux 中使用,并且基于 Linux shell(bash = Bourne-Again SHell)。

基本解决方案

因此,当使用需要 tty 的 Windows 程序时,您需要某种“适配器”,例如

winpty
,以弥合 Docker for Desktop 本机界面与 GitBash(或 Bash)的界面之间的差距。

这里有关于winpty

更详细的解释

更好的解决方案 - 具体

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

后续挂断问题

现在,关于您的 Web 服务问题,我认为您实际上并没有使用 expose 标签公开您的应用程序。看看 docker-compose 公开参考。你需要的是添加一个“端口”标签,就像这里引用的一样here

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

我希望这能解决你的问题;)

© www.soinside.com 2019 - 2024. All rights reserved.