首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置一个码头-撰写/桶/bash入口点?

如何设置一个码头-撰写/桶/bash入口点?
EN

Stack Overflow用户
提问于 2018-10-04 13:47:02
回答 2查看 10.6K关注 0票数 2

我想在交互式模式下输入一个对接容器,只使用docker-compose.yml与commad /bin/bash交互。在堆栈溢出中有一个类似的问题:如果没有工作的话,Interactive shell using Docker Compose答案。这就是我的对接者-Compose.yml的样子:

代码语言:javascript
复制
version: "3"
services:
  server:
    image: golang:1.11.1
    volumes:
      - './server:/go'
    ports:
      - '8080:8080'

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

这是我的控制台in并输出:

代码语言:javascript
复制
[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

阅读上面提到的帖子,我当然也试着用:

代码语言:javascript
复制
command: '-ti'

对于这两行:

代码语言:javascript
复制
stdin_open: true
tty: true

但是,在进行此对接时,在附加时会被卡住:

代码语言:javascript
复制
[bluebrown@firefly gowild]$ docker-compose up --build
Recreating gowild_server_1 ... done
Attaching to gowild_server_1

不会再发生什么事了。没有错误和退出,也没有“完成”消息。

当使用sh而不是bash尝试它时,它表示command: '-it的以下内容

代码语言:javascript
复制
server_1  | /bin/sh: 0: Illegal option -t

也会被卡住,就像在使用bash时,当它被替换时附加。

注意,我只需使用以下命令就可以构建和运行服务器,而不需要命令和入口点:

代码语言:javascript
复制
docker-compose up
docker-compose run --service-ports server

我的问题仍然是如何使用坞-撰写和一个入口点来完成它,所以它只能用docker-compose up来完成。

更新:我正在使用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-11 21:04:31

在这个特定的用例中,解决方案应该如下所示。其原因通常是/bin/bash与-ti一起用于在容器内输入shell。

可以通过对特定服务使用run命令来完成相同的工作。请注意,我也公开了服务端口。

代码语言:javascript
复制
docker-compose run --service-ports server bash

https://docs.docker.com/compose/reference/run/

如果容器已经在运行,那么exec就足够了。

票数 2
EN

Stack Overflow用户

发布于 2018-10-18 08:58:40

我认为这里的问题是码头组合可能会运行多个容器。因此,它通常不能连接到特定容器的stdin上。显然,在只有一个容器的情况下,不应该出现混淆,这样它就可以做到--但是如果稍后向yml中添加另一个容器,则会改变行为,这将是一个混乱的问题,本质上是一个错误。

所以..。写作不是这份工作的合适工具。

我有一个名为dockersh的bash脚本,它可以很容易地放到任何坞映像的外壳中:

代码语言:javascript
复制
#!/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等在linux上很有用,您也可以通过将$SSH_AUTH_SOCK安装到容器中来实现这一点,但这在mac上不起作用(至少对我是这样)。

对于上述情况,您可以以以下方式运行:

代码语言:javascript
复制
dockersh golang:1.11.1 bash

尽管您可能希望使其对自己来说不那么通用,并公开端口并安装到/go等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52648391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档