从链接的docker容器中的一个docker容器内部执行命令是否有任何可行的方法?我不想从主机执行exec命令.
我想编写简单的python应用程序并使用dockerfile放入docker conteiner.我的dockerfile是:
FROM ubuntu:saucy
# Install required packages
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install python
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb
# Add our python app code to the image
RUN mkdir -p /app
ADD . /app
WORKDIR /app
# Set the default command to execute
CMD ["python", "main.py"]
Run Code Online (Sandbox Code Playgroud)
在我的python应用程序中,我只想连接到数据库.main.py看起来像这样:
import MySQLdb as db
connection = db.connect(
host='localhost',
port=3306,
user='root',
passwd='password',
)
Run Code Online (Sandbox Code Playgroud)
当我用以下代码构建docker图像时:
docker build -t myapp .
Run Code Online (Sandbox Code Playgroud)
并使用以下命令运行docker镜像:
docker run -i myapp
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
_mysql_exceptions.OperationalError: (2002, "Can't …
Run Code Online (Sandbox Code Playgroud) 我尝试用ansible部署docker.我有一个docker数据库容器,而在其他容器中是我的web应用程序,我尝试链接这两个容器.问题是数据库容器没有时间自行配置,并且Web容器已经启动.我的ansible剧本看起来像:
...
- name: run mysql in docker container
docker:
image: "mysql:5.5"
name: database
env: "MYSQL_ROOT_PASSWORD=password"
state: running
- name: run application containers
docker:
name: "application"
image: "myapp"
ports:
- "8080:8080"
links:
- "database:db"
state: running
Run Code Online (Sandbox Code Playgroud)
如何确定数据库是否启动?我尝试使用wait_for模块,但这不起作用.我不想设置超时,这对我来说不是一个好选择.
我生成了ssh密钥,并将其复制到远程服务器.当我尝试ssh到该服务器时一切正常:
ssh user@ip_address
Run Code Online (Sandbox Code Playgroud)
用户不是root用户.如果我尝试ssh throw ansible:
ansible-playbook -i hosts playbook.yml
Run Code Online (Sandbox Code Playgroud)
与ansible剧本:
---
- hosts: web
remote_user: user
tasks:
- name: test connection
ping:
Run Code Online (Sandbox Code Playgroud)
和主机文件:
[web]
192.168.0.103
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
...
Permission denied (publickey,password)
Run Code Online (Sandbox Code Playgroud)
有什么问题?