无法访问DOCKER容器

4

我在AWS上的Ubuntu 16.04 Xenial系统中使用docker-compose为Nginx和NodeJS分别设置了两个容器。一切运作正常。

现在,我想进入Nginx容器查看其内容。我将使用以下命令:

sudo docker exec -it <container-name> bash

我得到了以下错误

oci runtime error: exec failed: container_linux.go:265: starting container process caused "exec: \"bash\": executable file not found in $PATH"

路径为(使用echo $PATH)

/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

docker-compose.yml 文件如下:

version: "0.9"
services:

nginx:
  build: ./nginx
  restart: always
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - /etc/letsencrypt/:/etc/letsencrypt/
  links:
    - node:node

node:
  build: ./node
  restart: always
  ports:
   - "8080:8080"
  volumes:
    - ./node:/usr/src/app
    - /usr/src/app/node_modules

如何访问容器?谢谢。


我试过使用/bin/bash,但仍然出现相同的错误。 - RmR
你应该展示你的Dockerfiles,而不仅仅是Compose文件。 - OneCricketeer
可能是为什么Docker说无法执行'bash'?的重复问题。 - tgogos
3个回答

9

您确定在您的Docker镜像中可用bash解释器吗?例如,在基本的alpine镜像中它是不可用的。

您可以尝试使用以下命令启动容器:

sudo docker exec -it <container-name> sh

查看错误是否仍然存在。

顺便说一下,usermod -aG docker <用户名>将允许您不再使用sudo作为用户<用户名>运行docker命令。


@Raj 并不是所有的容器都需要 Bash shell。 - OneCricketeer
它确实起作用了,我能够访问目录。谢谢。 - RmR

2

路径是(使用echo $PATH)

那是你的主机...你的错误表明你无法进入容器,所以不确定为什么要输出那个。

我们看不到你的基础镜像,但Apline镜像不带有bash。你需要额外安装它。sh应该可以工作。

如果您使用docker compose运行容器,则可以使用它来执行命令。

如果您只想列出文件夹,则只需要ls

docker-compose exec nginx ls /

0

大多数基础镜像都在运行alpine linux,由于空间原因没有bash而是sh,所以请尝试使用

docker exec -ti <container> sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接