gpt4 book ai didi

docker - 如何设置docker-compose/bin/bash入口点?

转载 作者:行者123 更新时间:2023-12-02 19:29:49 25 4
gpt4 key购买 nike

我只想使用docker-compose.yml与commad / bin / bash以交互方式输入docker容器。堆栈溢出有一个类似的问题:Interactive shell using Docker Compose
提供的答案无效。这是我的docker-compose.yml的样子:

version: "3"
services:
server:
image: golang:1.11.1
volumes:
- './server:/go'
ports:
- '8080:8080'

command: '-ti'
entrypoint:
- '/bin/bash'

这是我的控制台并输出:
[bluebrown@firefly gowild]$ docker-compose up --build
Recreating gowild_server_1 ... done
Attaching to gowild_server_1
server_1 | bash: cannot set terminal process group (-1): Inappropriate ioctl for device
server_1 | bash: no job control in this shell
server_1 | root@d5884893075a:/go# exit
gowild_server_1 exited with code 0

docker-compose.yml and console

阅读上述文章我当然也尝试替代:
command: '-ti'

对于这两行:
stdin_open: true
tty: true

但是在执行此操作时,docker compose在附加时会卡住:
[bluebrown@firefly gowild]$ docker-compose up --build
Recreating gowild_server_1 ... done
Attaching to gowild_server_1

而且没有任何进一步发生。没有错误并退出,也没有“完成”消息。

Try with substitued tty and stdin

当尝试使用 sh而不是 bash时,它说的是 command: '-it的以下内容:
server_1  | /bin/sh: 0: Illegal option -t

替换时,附着时也会像bash一样卡住。

请注意,我可以使用以下命令构建和运行不带命令和入口点的服务器:
docker-compose up
docker-compose run --service-ports server

我的问题仍然是如何使用docker-compose和一个入口点来做到这一点,因此只能使用 docker-compose up来完成。

更新:我正在使用Linux manjaro

最佳答案

我认为这里的问题是docker-compose可能潜在地运行多个容器..因此它通常不能附加到特定容器的stdin。显然,在您只有一个容器的情况下,应该没有混淆,它可以做到—但是,如果您以后在yml中添加另一个容器,那会改变行为,这将造成混乱,并且在本质上是一个错误。

所以.. compose并不是这项工作的正确工具。

我有一个叫做dockersh的小bash脚本,它可以很容易地放入任何docker镜像的shell中:

#!/bin/sh

IMAGE=$1
shift

# sanitise the name a little
NAME=$(echo $IMAGE | tr '/:' '-')

# generate a random ID in case we have multiple running
ID=$(env LC_CTYPE=C tr -dc "a-z0-9" < /dev/urandom | head -c 10)

docker run --rm -ti \
--name $NAME-$ID \
-v $PWD:/mnt/$(basename $PWD) \
-v $HOME/.ssh:/root/.ssh \
$IMAGE \
"$@"
.ssh挂载对于克隆git repos等很有用。在linux上,您也可以通过将 $SSH_AUTH_SOCK挂载到容器中来进行此操作,但这不适用于Mac(至少对我而言)。

对于上述情况,您可以按以下方式运行:
dockersh golang:1.11.1 bash

尽管您可能希望自己降低通用性,并公开端口并装入 /go等。

关于docker - 如何设置docker-compose/bin/bash入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com