如何使用 'gcloudcomputessh<instance> --container<container>'

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

使用

gcloud compute instances create-with-container
时,如果我使用具有
bash
作为 CMD 或 ENTRYPOINT 的映像,并且如果我通过 ssh 进入虚拟机,并最终附加到容器,那么我最终会按预期进入
bash
shell:

> gcloud compute instances create-with-container test \
  --container-image debian:12-slim --container-stdin --container-tty
> gcloud compute ssh test
  ########################[ Welcome ]########################
  #  You have logged in to the guest OS.                    #
  #  To access your containers use 'docker attach' command  #
  ###########################################################

come@test ~ $ docker container ls
CONTAINER ID   IMAGE            COMMAND   CREATED       STATUS             PORTS     NAMES
2667f985b3f1   debian:12-slim   "bash"    2 hours ago   Up About an hour             klt-test-wwbe
come@test ~ $ docker inspect klt-test-wwbe | grep -A 1 Cmd
            "Cmd": [
                "bash"
come@test ~ $ docker attach klt-test-wwbe
root@test:/# echo $SHELL
/bin/bash
root@test:/#

使用

--command
选项附加容器时获得相同的效果:

> gcloud compute ssh test --command "docker attach klt-test-wwbe" -- -t
root@test:/# echo $SHELL
/bin/bash

但是,如果我使用

gcloud
ssh 进入容器并使用
--container
选项连接到容器,我最终不会进入
bash
shell:

> gcloud compute ssh test --container klt-test-wwbe
# echo $SHELL

#

为什么会这样呢?以及如何在使用

gcloud compute ssh test --container klt-test-wwbe
时获得指定为 docker 映像的 ENTRYPOINT 或 CMD 的 shell(或其他环境),最好无需键入它。

当然,在这个例子中,我只需输入

bash
即可完成。但如果 ENTRYPOINT 或 CMD 不是那么微不足道的东西,我首先需要检查容器,这在某种程度上会达不到目的。

docker gcloud-compute
1个回答
0
投票

gcloud compute ssh
使用
ssh
,您可以使用
-vvv
获取更详细的日志记录以查看发生了什么:

gcloud compute ssh ${NAME} \
--container=${CONTAINER} \
--zone=${ZONE} \
--project=${PROJECT} \
--ssh-flag="-vvv"

如果您对输出进行 grep,您应该看到:

debug1: Sending command: sudo docker exec -it {CONTAINER} /bin/sh

注意它正在使用

sh
不是
bash

这应该反映以下行为:

cloud compute ssh ${NAME} \
--zone=${ZONE} \
--project=${PROJECT} \
--command="docker exec -it {CONTAINER} /bin/sh"
© www.soinside.com 2019 - 2024. All rights reserved.