我使用以下命令创建了容器:
docker run -d -p 52022:22 basickarl/docker-git-test
以下是命令:
root@basickarl:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@basickarl:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4ac54468455 basickarl/docker-git-test:latest "/bin/bash" 7 minutes ago Exited (0) 26 seconds ago adoring_lumiere
22d7c5d83871 basickarl/docker-git-test:latest "/bin/bash" 2 hours ago Exited (127) About an hour ago thirsty_wright
root@basickarl:~# docker attach --sig-proxy=false e4
FATA[0000] You cannot attach to a stopped container, start it first
root@basickarl:~# docker start e4
e4
root@basickarl:~# docker attach --sig-proxy=false e4
FATA[0000] You cannot attach to a stopped container, start it first
root@basickarl:~#
没什么好说的,我期待容器启动并保持优势。这是日志:
root@basickarl:~# docker logs e4
root@basickarl:~#
答案 0 :(得分:52)
您正在尝试运行bash
,这是一个需要tty才能运行的交互式shell。在"分离的"中运行它并没有多大意义。使用-d
的模式,但您可以通过向命令行添加-it
来执行此操作,这可确保容器具有与之关联的有效tty并且stdin
保持连接:
docker run -it -d -p 52022:22 basickarl/docker-git-test
您通常会运行某种长期非交互式流程(如sshd
,Web服务器,数据库服务器或流程管理器,如systemd
或{{1启动分离的容器时。
如果您尝试运行supervisor
之类的服务,则无法简单地运行sshd
。这将取决于您在容器内运行的分布 - 执行以下两项操作之一:
它会尝试联系service ssh start
或systemd
等流程管理器来启动该服务。由于没有服务管理器在运行,因此会失败。
它实际上会启动upstart
,但会在后台启动。这意味着(a)sshd
命令退出,这意味着(b)Docker认为您的容器已经失败,因此它会清除所有内容。
如果您想在容器中运行 ssh,请考虑像this这样的示例。
如果要在容器内运行service sshd start
和其他进程,则需要调查某种流程主管。
答案 1 :(得分:1)
我需要的是在我的Ubuntu机器上的不同端口/ 3301 /上使用Docker和MariaDb,因为我已经安装了MySql并在3306上运行。
要在半天搜索后执行此操作,请使用:
docker run -it -d -p 3301:3306 -v ~/mdbdata/mariaDb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mariaDb mariadb
这将使用最新的MariaDb拉取图像,创建名为mariaDb的容器,并在端口3301上运行mysql。其所有数据都位于/ mdbdata / mariaDb的主目录中。
之后登录mysql可以使用:
mysql -u root -proot -h 127.0.0.1 -P3301
使用的来源是:
Iarks在本文/使用-it -d中的答案是关键:) /
how-to-install-and-use-docker-on-ubuntu-16-04
祝你好运!