windows10下docker容器运行superset后怎么连接mysql 5C

windows10下docker容器运行superset后怎么连接mysql,宿主机已经安装了mysql且可以正常使用,docker容器内也有mysql。windows没有安装python。图片说明

1个回答

刚安装好superset的时候大家都知道是用的其自动生成的sqllite数据库,如果我们想让器链接到自己数据库,给大家分享一下我的方法,以mysql为例:

1.安装好数据库mysql:

$ sudo apt-get install mysql-server

$ sudo apt-get install mysql-client

$ sudo apt-get install libmysqlclient-dev

安装过程中需要设置启动mysql密码,必须记住。

2.启动mysql,并创建数据库

$ mysql -u root -p

输入密码加入以后,命令:

mysql> create database teamwork

teamwork为库名

然后操作数据库,可以用写好的sql脚本文件:
drop database teamwork;
create database teamwork;
use teamwork;

create table teams
(team_id int(11) not null auto_increment,
team_name varchar(50) not null,
team_intro varchar(500) not null,
team_builderid int(11) not null,
primary key(team_id),
key team_ibfk_1 (team_builderid),
constraint team_ibfk_1 foreign key (team_builderid) references users (user_id) on delete cascade on update cascade
)engine = innodb default charset=utf8;

insert into teams values (1,'团队1','篮球群','1'),
(2,'团队2','兴趣爱好','1'),(3,'团队3','群','1'),(4,'团队4','篮球群','2');
将这个文件保存为teamwork.sql,终端执行命令:

$ mysql -u root -p teamwork</home/jiang/py3env/teamwork.sql

上面的命令是在数据库teamwork中执行sql文件,注意/home/wang/py3env/teamwork.sql为存放路径,teamwork是已有的数据库。

输入密码后可键入命令,查看是否成功:

mysql> show database;

mysql> use teamwork;

mysql> show tables;

3.配置superset配置文件,config.py
图片说明
将原数据库改为myqsl。

4.重新配置登录帐号

  这个时候数据库是新的状态,之前在sqlite中的登录帐号已经没有了需要重新设置一下:

$ (py3env)jiang@ubuntu:~/py3env$ fabmanager create-admin --app superset

$ (py3env)jiang@ubuntu:~/py3env$ superset db upgrade

$ (py3env)jiang@ubuntu:~/py3env$ superset init

注意这些操作都是在虚拟环境激活的情况下完成的。

这个时候重新启动superset就完成了:

$ (py3env)jiang@ubuntu:~/py3env$ superset runserver

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Docker,PHP PDO和单个MySQL容器(无法通过容器名称连接)

<div class="post-text" itemprop="text"> <p>I've run into an interesting issue where there seems to be a difference between the <code>docker run</code> command and using <code>docker-compose</code>.</p> <p>I have two Docker containers, one is an Apache website with PHP, the other a MySQL. I use the following commands to run the containers:</p> <p>Website:</p> <pre><code>docker run -p 8080:80 -d website_local </code></pre> <p>MySQL: </p> <pre><code>docker run -e MYSQL_ROOT_PASSWORD=RamaLamaDingDong --name=mysql5725 -d mysql:5.7.25 </code></pre> <p>Looking at the Docker ecosystem I can see them both running:</p> <pre><code>$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 849c421e750b website_local "/usr/sbin/apache2ct…" 19 minutes ago Up 19 minutes 0.0.0.0:8080-&gt;80/tcp pedantic_tesla ccebba95693b mysql:5.7.25 "docker-entrypoint.s…" 23 minutes ago Up 23 minutes 3306/tcp, 33060/tcp mysql5725 </code></pre> <p>I have setup a PDO connection to the database, using the name for the MySQL Docker container:</p> <p>PHP: (the <code>USER</code> and <code>PASS</code> are correct and yes, I know I shouldn't use the root's credentials)</p> <pre><code>try { $dbh = new PDO('mysql:host=mysql5725;dbname=grocery;charset=utf8', USER, PASS); $dbh-&gt;setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo $e-&gt;getMessage(); $errorCode = $e-&gt;getCode(); } </code></pre> <p>When attempting to connect to the database I get the following error:</p> <blockquote> <p>SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known</p> </blockquote> <p>If I replace <code>host</code> in the connections string with the Docker IP address (172.17.0.3) of the container it connects properly.</p> <p>Now it gets interesting. If I bring up the containers using Docker Compose:</p> <pre><code>version: '3' services: db: image: mysql:5.7.25 container_name: mysql5725 environment: MYSQL_ROOT_PASSWORD: RamaLamaDingDong ports: - "3306:3306" web: image: website_local:latest container_name: website_local depends_on: - db volumes: - ./website/www:/var/www/html/ ports: - "8080:80" </code></pre> <p>The PHP function connects correctly using the name of the Docker container (<code>mysql5725</code>), but cannot connect using the IP address of the Docker container.</p> <p>Many times in a testing environment I only want to stop and rebuild certain containers, especially when dealing with more than two Docker images. I should only have to use the resource's name when making a connection because there is no guarantee the network will assign the same IP addresses to containers every time.</p> <p>Why should these two methods of launching Docker containers produce different results? Is there a way to 'normalize' this, so connecting by name will work no matter how the container is launched?</p> </div>

docker容器运行mysql未做挂在,数据却没有丢失?

本人docker小白,在虚拟机上自学docker。 在网上看到都说重启容器或者docker服务,在mysql未做挂在的情况下,mysql数据库中的数据会丢失。 然而在自行实验时并没有出现数据丢失的情况。 1、重启容器 2、重启docker服务 3、重启虚拟机。 以上方式都未出现数据丢失。所以很疑惑,望大神讲解。 docker版本:1.13.1 mysql版本:8.0.19 VMware版本:15.0.0

Docker容器如何跨主机连接数据库

## 问题描述: 例如:我要创建一个 sonar 容器,如何使 sonar 连接到不同主机上的数据库。 ## 简单介绍: 下面的代码是目前我在一台主机上运行MySQL和Sonar,如何修改Sonar的启动代码,达到让Sonar和MySQL分布在不同的主机呢? ### 主机A 启动 MySQL docker run \ -d \ -p 3307:3306 \ --name mysql \ -v /data/mysql/conf:/etc/mysql/conf.d \ -v /data/mysql/logs:/logs \ -v /data/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 ### 主机A 启动 Sonar docker run \ -d \ --name sonarqube \ -p 9000:9000 \ -p 9092:9092 \ --link=mysql:mysql \ -v /data/sonarqube/logs:/opt/sonarqube/logs \ -v /data/sonarqube/conf:/opt/sonarqube/conf \ -v /data/sonarqube/data:/opt/sonarqube/data \ -v /data/sonarqube/extensions:/opt/sonarqube/extensions \ -e SONARQUBE_JDBC_USERNAME=sonar \ -e SONARQUBE_JDBC_PASSWORD=sonar \ -e SONARQUBE_JDBC_URL="jdbc:mysql://10.9.40.121:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \ sonarqube:7.4-community

Docker Mysql链接到另一个容器

<div class="post-text" itemprop="text"> <p>I created a Docker container with Apache on it. Everything works, except that I can't link MySQL (<a href="https://hub.docker.com/_/mysql/" rel="nofollow">https://hub.docker.com/_/mysql/</a>) to my container, and I'm not sure what I did wrong.</p> <p>Here are the steps I did:</p> <ol> <li>I run mysql server container</li> </ol> <p><code>docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=pass123 -d mysql/mysql-server:latest</code></p> <ol start="2"> <li>Then, I run and link my Apache Docker:</li> </ol> <p><code>docker run -it --link mysqlserver:mysql -v "$(pwd)":/var/www/html -p 80:80 -p 3306:3306 apachebash</code></p> <p>But I cant access MySQL.</p> </div>

Docker容器在本地连接到MySQL数据库 - >重定向到另一个容器

<div class="post-text" itemprop="text"> <p>I am new to Docker. </p> <p>I have read that it is better to keep an app per container. </p> <p>I need to run web app (LAMP stack). So I have found the container for running PHP + Apache. </p> <p>Now I need to set up a mysql container. But I am not sure what is the correct way to do that.</p> <p>I read that it is possible to connect multiple containers together. </p> <p>The idea is to make it trasnparent to the container running PHP + Apache when it tries to connect to mysql database locally.</p> <p>But redirect all local connections to another container.</p> <p>Another idea I have is to provide environment variable with host where should all connections go. In this case I need to have publicly accessible mysql server, but I need to keep it private and accessible only locally.</p> <p>Could you please suggest a better option to choose in my case ? </p> <p>Thank you</p> </div>

docker重启后,mysql自建的数据库就消失,重启容器后又显示出来,这是怎么回事?

我用的win10环境,运行容器时,挂载了mysql的一些目录到本地磁盘,代码如下: ``` #拉取容器 docker pull mysql:5.7.26 #运行容器 docker run ^ --name mysql ^ --restart always ^ #我这里明明设置了,退出后总是重启 -p 127.0.0.1:3306:3306 ^ -e MYSQL_ROOT_PASSWORD=#Dsf135246 ^ -v "D:/workspace/Hyper-V/External hard disks/mysql/conf":/etc/mysql/conf.d ^ -v "D:/workspace/Hyper-V/External hard disks/mysql/logs":/logs ^ -v "D:/workspace/Hyper-V/External hard disks/mysql/data":/var/lib/mysql ^ -d ^ mysql:5.7.26 ``` 这是在本地建立的挂载目录: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562492698_90719.png) 生成mysql容器后,我创建了一个数据,和一个表(我用的sqlyog数据库管理工具),到这里一切都很正常: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562492451_122509.png) 但是,当我重启docker后,问题来了: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562492914_406288.png) 挂载的磁盘,容器运行状态,都是正常的: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562493376_782889.png) 可是我自己建的数据库:springcloud,在sqlyog中显示不出来: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562493501_144875.png) 于是我重启容器,库和表又重新显示出来了: ![图片说明](https://img-ask.csdn.net/upload/201907/07/1562493705_372214.png) 我的电脑重启是常有的事,所以docker也会跟着重启,我不想每次重启电脑,或docker后都要重启一下mysql容器,请问这是怎么回事?我该如何解决?

如何使用go正确连接mysql docker容器?

<div class="post-text" itemprop="text"> <p>I started to learn docker today and have big blocker. What I am trying to do is thatopen mysql connection using go-sql-driver/mysql.</p> <p>I can connect mysql container using sequel pro with localhost:3306<br> However, it seems not working with go-sql-driver/mysql</p> <pre><code>db, err := sql.Open("mysql", "root:welcome@/tcp(127.0.0.1:3306)/test") </code></pre> <p>//tried 172.17.0.1:3306 and 172.17.0.2:3306</p> <p>and this is my container's network info </p> <pre><code>"Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "47b2a5c798522f5eb6688c4540b4017335eb174528d510b9f1d35d125313017c", "EndpointID": "ca2256684928e4184efd36f880cd70d3809d79db5b30c10ab37c66ccbbbba610", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" } } </code></pre> <p>I am not sure which info I should provide to get right answer since I am new to vm</p> </div>

用docker创建mysql容器,为什么只能连接一个?

用docker pull mysql 官方镜像 然后创建3个容器 docker run --name mysql2 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci docker run --name mysql3 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci docker run --name mysql4 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 可是只能连接一个mysql容器,其他的mysql容器都会自动断开。是什么原因呢?有人知道吗?

Docker应用程序无法访问在另一个容器中运行的MySQL

<div class="post-text" itemprop="text"> <p>I am trying to bring up a dockerized instance of Testlink (LAMP application) and connect it to an instance of MYSQL running in another container.</p> <pre><code>$ sudo docker network create mynetwork </code></pre> <p>Instantiate the container with MySQL</p> <pre><code>$ docker run -d --name mysql -p 3306:3306 --network mynetwork -v /Users/dockervol/mysql:/var/lib/mysql -e 'MYSQL_ROOT_NAME=root' -e 'MYSQL_ROOT_PASSWORD=password' mysql </code></pre> <p>Instantiate the container with Testlink</p> <pre><code>$ docker run -d -p 80:80 --network mynetwork --name testlink suzukishunsuke/testlink </code></pre> <p>When I access <a href="http://localhost/testlink" rel="nofollow noreferrer">http://localhost/testlink</a> and follow the standard installation tests it seems to work. The two containers are linked but when testlink tries to login to mysql it says Access denied.</p> <pre><code>Access denied for user 'root'@'156.18.0.2' (using password: YES) </code></pre> </div>

虚拟机docker 创建mysql容器远程连接不了

![图片说明](https://img-ask.csdn.net/upload/201909/16/1568608789_863017.png) 如图进入容器内部,admin root wang这三个账户都连接不了 虚拟机的防火墙也已经关了,实在不知道怎么回事啊,删了这个容器,从新建立一个就可以连,但是关机后就又连不了了,扎心,求大神解惑

docker容器中,主机可以ping通虚拟机,但是ping不通docker容器

最近研究docker容器发现几个问题有几点疑惑: 1.首先自己的ISO文件打成tar包后导如容器中,防火墙fiter、nat表丢失,启动也启动不了,百度能查到的基本都试了,貌似没什么用,而且虚拟机还ping不通docker地址; 2.我想把mysql、java之类的放在一个镜像容器中,从仓库中检索了一个centos6系统出来,发现这次mysql也连接不上,ping了一下,虚拟机和docker能互通(不同网段),主机和虚拟机能互通(同一网段内),结果就是主机ping不通docker容器,防火墙之类的已关闭,路由表也书写了,愣是通不了

无法从Docker容器连接到Aurora MySQL,但使用命令行工作

<div class="post-text" itemprop="text"> <p>am trying to do this from an ec2 instance, trying to connect to aws rds aurora mysql. The following command lets me connect to the rds: mysql -h cluster.cluster-c3dpvouhxmjg.us-east-1.rds.amazonaws.com --port 3306 -u root -p</p> <p>I have written a golang application and containerized it using docker here: Dockerfile:</p> <pre><code>FROM artifactory.cloud.com/research/golang:1.10-alpine3.7 RUN mkdir -p /go/src/github.com/perfGo/ WORKDIR /go/src/github.com/perfGo COPY ./ $WORKDIR RUN apk update &amp;&amp; apk upgrade RUN go build RUN chmod +x ./entrypoint.sh RUN ls RUN chmod +x ./perfGo EXPOSE 3306 #I set the proxies here ENTRYPOINT ["./entrypoint.sh"] </code></pre> <p>entrypoint.sh</p> <pre><code>#!/usr/bin/env bash ./perfGo </code></pre> <p>perf.go</p> <pre><code>package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "root:fdsffdsfs@tcp(cluster.cluster-c3dpvouhxmjg.us-east-1.rds.amazonaws.com:3306)/testdb") checkErr(err) _,dbErr := db.Exec("USE testdb") if err != nil { panic(dbErr) } // insert _, inErr := db.Query("INSERT INTO books VALUES('tttt','dsfdsfs','fdsfasaf','55')") defer db.Close() // if there is an error inserting, handle it if inErr != nil { panic(inErr.Error()) } } func checkErr(err error) { if err != nil { panic(err) } } </code></pre> <p>The command I use to run the contianer is </p> <pre><code>docker run -p 3306:3306 -ti 23b3c5c510b4 </code></pre> <p>The error I see is : panic: dial tcp: lookup cluster.cluster-c3dpvouhxmjg.us-east-1.rds.amazonaws.com on 8.8.4.4:53: read udp 172.17.0.2:52640-&gt;8.8.4.4:53: i/o timeout Can someone pls help me out on this. This totally works on container on my mac using mysql on localhost</p> </div>

如何使用Docker连接php-apache和MySQL?

<div class="post-text" itemprop="text"> <p>I have a Wordpress site on live server and I want to create a LAMP stack locally with Docker to test things.</p> <p>I pull the images of <code>php:7.0-apache</code> and <code>mysql:5.7</code>, the same versions on live.</p> <p>I create a MySQL container:</p> <pre><code>docker run -d --name achi-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 </code></pre> <p>I create a php &amp; apache container and link it with MySQL:</p> <pre><code>docker run -d --name achi-php-apache --link achi-mysql:mysql -p 8080:80 -v /home/achi/workspace/web/wordpress-template/:/var/www/html php:7.0-apache </code></pre> <p>I get the following error on localhost:8080:</p> <p><code>Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/wp-includes/wp-db.php:1564 [...]</code></p> <p>Do I link these two containers the wrong way?</p> </div>

docker run运行mysql停止的问题

我用docker run 命令启动mysql容器: docker run -e MYSQL_ROOT_PASSWORD=密码 mysql 运行到图中的位置就不进行了,跟什么有冲突了?还是写的命令有问题?如何解决呢? end of list of non-natively partitioned tables![图片说明](https://img-ask.csdn.net/upload/201705/10/1494395955_985078.png)

docker容器正常启动,宿主机器无法访问启动的服务

####我在自己的windows7的电脑上安装了docker ####打包了一个springboot的服务,下面是我的Dockerfile文件 ``` FROM java:8 VOLUME /tmp ADD docker-demo_jar.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` #### 然后通过以下命令启动容器 ``` docker run -t -p 8080:8080 springboot/dockerdemo ``` #### 下面是启动后的打印日志 ![图片说明](https://img-ask.csdn.net/upload/201812/21/1545381289_860363.png) #### 然后通过本机的浏览器访问就是访问不了启动的服务 #### 通过docker ps 也看到服务是启动的

Docker的mysql集群节点可以正常创建,但docker无法连接到宿主机的mysql应如何解决?

1.创建网段 docker network create --subnet=172.18.0.0/16 net1 2. 创建数据卷 docker volume create --name v1 3. 创建备份数据卷(用于热备份数据) docker volume create --name backup 4. 创建第1个MySQL节点 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc 使用docker容器连接宿主机我的思路是这样的,创建数据卷和网段,通过端口映射到宿主机的mysql存储文件从而达到docker读取宿主机mysql数据,并做mysql集群的功能,但是现在遇到这样的一个问题,第四步的节点创建成功了但是Navigcat却无法正常连接到宿主机的mysql请问是什么原因呢?我在其他网站上看到,这时候创建mysql节点需要等待两分钟以上,但是我已等待超过2个钟可结果还是连接不成功,想请教一下各位前辈,应该怎么解决这样的问题,我的宿主机mysql外界ip是可以正常允许访问的 ![图片说明](https://img-ask.csdn.net/upload/201806/25/1529896552_634053.png) ![图片说明](https://img-ask.csdn.net/upload/201806/25/1529896565_980225.png)

在docker容器中配置ssh无秘连接时,连接拒绝?

**各位大神,因主机配置有限,小白我使用docker创建多个Hadoop容器来模拟 集群,现在在配置容器的ssh无秘连接时出现了错误。 ①刚开始拉取镜像,创建容器后,能登陆自己** ![图片说明](https://img-ask.csdn.net/upload/201902/23/1550885384_486534.png) **②但是重新启动容器后** ![图片说明](https://img-ask.csdn.net/upload/201902/23/1550885467_540106.png) **各位大神 ,有没有知道这是怎么回事的,小弟在此拜谢**

如何在Docker容器之间建立连接

<div class="post-text" itemprop="text"> <p>I am having connection issues when I try to connect my goLang GORM service to a Docker Postgress container. I believe the problem is my golang code at the bottom at the connection string.</p> <pre><code>docker-compose up Recreating postgress_postgre_1 ... done Attaching to postgres postgres | 2018-12-11 21:08:48.283 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 postgres | 2018-12-11 21:08:48.283 UTC [1] LOG: listening on IPv6 address "::", port 5432 postgres | 2018-12-11 21:08:48.291 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" postgres | 2018-12-11 21:08:48.316 UTC [20] LOG: database system was shut down at 2018-12-11 21:08:44 UTC postgres | 2018-12-11 21:08:48.328 UTC [1] LOG: database system is ready to accept connections </code></pre> <p>=== when I run the golang I get... panic: failed to connect database</p> <p>=============== docker-compose.yml</p> <pre><code>version: '3.6' services: postgre: image: postgres:11.1-alpine ports: - '5432:5432' network_mode: bridge container_name: postgres environment: POSTGRES_USER: 'user' POSTGRES_PASSWORD: 'password' POSTGRESS_DB: 'db_amex01' volumes: - ./init:/docker-entrypoint-initdb.d/ </code></pre> <p>==== main.go</p> <p>package main</p> <pre><code>import ( "fmt" "log" "net/http" "github.com/gorilla/mux" "github.com/jinzhu/gorm" // _ "github.com/jinzhu/gorm/dialects/sqlite" _ "github.com/jinzhu/gorm/dialects/postgres" ) // _ "github.com/jinzhu/gorm/blob/master/dialects/postgres" type ToDo struct { gorm.Model ID int `json:"id"` TASK_STRING string `json:"task_string"` DONE bool `json:"done"` } var db *gorm.DB var err error func main() { const ( host = "localhost" port = 5432 user = "postgres" password = "password" dbname = "db_amex01" ) // this is the problem I believe I am having... db, err := gorm.Open("postgres", "host='postgres' port=5432 user=user dbname='db_amex01' password='password'") defer db.Close() if err != nil { panic("failed to connect database") } defer db.Close() </code></pre> </div>

Docker应用程序容器不会与我的MySQL容器通信

<div class="post-text" itemprop="text"> <p>I am using docker compose to put together two containers to help better familiarize myself with docker and I can't seem to figure out why my two containers can't communicate with each other.</p> <p>My dockerfile for my app is:</p> <pre><code>FROM golang ADD . /go/src WORKDIR /go/src RUN go get github.com/go-sql-driver/mysql RUN go get github.com/gorilla/mux RUN go build -o bin/main main.go app.go model.go ENTRYPOINT /go/src/bin/main EXPOSE 8080 </code></pre> <p>and my docker-compose.yml is</p> <pre><code>version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always ports: - "3306:3306" expose: - "3306" environment: MYSQL_ROOT_PASSWORD: testrootpassword MYSQL_DATABASE: testing MYSQL_USER: testuser MYSQL_PASSWORD: testpassword api: depends_on: - db build: . ports: - "8080:8080" # restart: always environment: APP_DB_HOST: db:3306 APP_DB_NAME: testing APP_DB_USERNAME: testuser APP_DB_PASSWORD: testpassword volumes: db_data: </code></pre> <p>The main app just starts a server on port 8080 and <em>tries</em> to establish a connection to SQL. The full implementation is here: <a href="https://github.com/bliitzkrieg/go-sql-testing" rel="nofollow noreferrer">https://github.com/bliitzkrieg/go-sql-testing</a></p> <pre><code>package main import ( "os" ) func main() { a := App{} a.Initialize( os.Getenv("APP_DB_USERNAME"), os.Getenv("APP_DB_PASSWORD"), os.Getenv("APP_DB_NAME")) a.Run(":8080") } </code></pre> <p>app.go</p> <pre><code>package main import ( "database/sql" "encoding/json" "fmt" "log" "net/http" "strconv" _ "github.com/go-sql-driver/mysql" "github.com/gorilla/mux" ) type App struct { Router *mux.Router DB *sql.DB } func (a *App) Initialize(user, password, dbname string) { connectionString := fmt.Sprintf("%s:%s@/%s", user, password, dbname) var err error a.DB, err = sql.Open("mysql", connectionString) if err != nil { log.Fatal(err) } a.ensureTableExists() a.Router = mux.NewRouter() a.initializeRoutes() } func (a *App) ensureTableExists() { if _, err := a.DB.Exec(tableCreationQuery); err != nil { log.Fatal(err) } } func (a *App) Run(addr string) { log.Fatal(http.ListenAndServe(":8080", a.Router)) } func (a *App) initializeRoutes() { a.Router.HandleFunc("/", a.sayHello).Methods("GET") a.Router.HandleFunc("/products", a.getProducts).Methods("GET") a.Router.HandleFunc("/product", a.createProduct).Methods("POST") a.Router.HandleFunc("/product/{id:[0-9]+}", a.getProduct).Methods("GET") a.Router.HandleFunc("/product/{id:[0-9]+}", a.updateProduct).Methods("PUT") a.Router.HandleFunc("/product/{id:[0-9]+}", a.deleteProduct).Methods("DELETE") } func (a *App) sayHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello Luca!") } func (a *App) getProduct(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid product ID") return } p := product{ID: id} if err := p.getProduct(a.DB); err != nil { switch err { case sql.ErrNoRows: respondWithError(w, http.StatusNotFound, "Product not found") default: respondWithError(w, http.StatusInternalServerError, err.Error()) } return } respondWithJSON(w, http.StatusOK, p) } func (a *App) getProducts(w http.ResponseWriter, r *http.Request) { products, err := getProducts(a.DB) if err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, products) } func (a *App) createProduct(w http.ResponseWriter, r *http.Request) { var p product decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&amp;p); err != nil { respondWithError(w, http.StatusBadRequest, "Invalid request payload") return } defer r.Body.Close() if err := p.createProduct(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusCreated, p) } func (a *App) updateProduct(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid product ID") return } var p product decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&amp;p); err != nil { respondWithError(w, http.StatusBadRequest, "Invalid resquest payload") return } defer r.Body.Close() p.ID = id if err := p.updateProduct(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, p) } func (a *App) deleteProduct(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, err := strconv.Atoi(vars["id"]) if err != nil { respondWithError(w, http.StatusBadRequest, "Invalid Product ID") return } p := product{ID: id} if err := p.deleteProduct(a.DB); err != nil { respondWithError(w, http.StatusInternalServerError, err.Error()) return } respondWithJSON(w, http.StatusOK, map[string]string{"result": "success"}) } func respondWithError(w http.ResponseWriter, code int, message string) { respondWithJSON(w, code, map[string]string{"error": message}) } func respondWithJSON(w http.ResponseWriter, code int, payload interface{}) { response, _ := json.Marshal(payload) w.Header().Set("Content-Type", "application/json") w.WriteHeader(code) w.Write(response) } const tableCreationQuery = `CREATE TABLE IF NOT EXISTS products ( id SERIAL, name TEXT NOT NULL, price NUMERIC(10,2) NOT NULL DEFAULT 0.00, CONSTRAINT products_pkey PRIMARY KEY (id) )` </code></pre> <p>To run the application I am using the docker command <code>docker-compose up -d --build</code> which builds the application fine. When I run <code>docker ps</code> it shows only my SQL server is up and when I look at the logs of my api container, it shows one line saying <code>2017/10/01 06:54:14 dial tcp 127.0.0.1:3306: getsockopt: connection refused</code>. I ran the application locally with the hard coded connection string and it worked fine. I am not really sure whats going on so hopefully somebody can help me out!</p> <p>Cheers!</p> </div>

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐